0

C++의 이중 연결 목록에서 null 개체 패턴을 사용하려고하지만 코드를 깨끗하게 유지하면서 사용할 수있는 방법을 찾지 못하는 것 같습니다.이중 연결 목록의 개체 패턴이 잘못되었습니다.

문제는 다음 코드 조각에있다 : 이전/다음 노드가 nullptr 경우

node->getNext()->setPrevious(node->getPrevious()); 
node->getPrevious()->setNext(node->getNext()); 

getNextgetPreviousNullNode 객체를 반환합니다.

이 실패 유스 케이스 - 노드가 헤드 노드 인 경우 :

메모리 누수를 일으키는 NullNode 객체에 2 노드의 이전 포인터를 설정합니다 다음. 내가 여기 달성하기 위해 노력하고있어하면 NOP를 유지하고 nullptr 및 클래스 유형 비교에서 깨끗한 코드를 유지하는 것입니다

node->getNext()->setPrevious(node->getPrevious()); 

모든 제안은 매우 이해할 수있을 것이다!

Node* Detach(Node* node) { 
    auto prev = node->getPrevious(); 
    auto next = node->getNext(); 
    prev->setNext(next); 
    next->setPrevious(prev); 

    node->setNext(nullNodeAddr); 
    node->setPrevious(nullNodeAddr); 

    return node; 
} 

NOP 또는 센티넬 패턴이 머리와 꼬리에 null 값을 걱정하지하는 작업을 단순화하는 방법 : 당신은, 이전 및 다음 뭔가 같은 노드를 저장하는 경우

+0

간단한 'if'확인? 예 : 'if (node! = nullptr) {...}'? –

+0

나는이 문제를 이해하지 못했다. node-> prev가 NullObject이면 node-> next-> prev를 NullObject로 설정 하시겠습니까? – selalerer

+0

당신을 이해한다면 이것은 Null Object 구현 문제 이상의 메모리 관리 문제입니다. (예 : [스마트 포인터] (http://en.wikipedia.org/wiki/Smart_pointer#C.2B.2B_smart_pointers "Wikipedia - 스마트 포인터")를 사용하면 메모리 누출없이 예상되는 동작을 볼 수 있습니다) 사실 NOP를 전혀 사용하지 않았다면 똑같은 메모리 누수가 발생합니다. – Lilshieste

답변

0

상황이 간단 그 목록. 어딘가에 대해 테스트해야한다면 실패합니다.

관련 문제