0
C++의 이중 연결 목록에서 null 개체 패턴을 사용하려고하지만 코드를 깨끗하게 유지하면서 사용할 수있는 방법을 찾지 못하는 것 같습니다.이중 연결 목록의 개체 패턴이 잘못되었습니다.
문제는 다음 코드 조각에있다 : 이전/다음 노드가 nullptr
경우
node->getNext()->setPrevious(node->getPrevious());
node->getPrevious()->setNext(node->getNext());
getNext
및 getPrevious
이 NullNode
객체를 반환합니다.
이 실패 유스 케이스 - 노드가 헤드 노드 인 경우 :
메모리 누수를 일으키는 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 값을 걱정하지하는 작업을 단순화하는 방법 : 당신은, 이전 및 다음 뭔가 같은 노드를 저장하는 경우
간단한 'if'확인? 예 : 'if (node! = nullptr) {...}'? –
나는이 문제를 이해하지 못했다. node-> prev가 NullObject이면 node-> next-> prev를 NullObject로 설정 하시겠습니까? – selalerer
당신을 이해한다면 이것은 Null Object 구현 문제 이상의 메모리 관리 문제입니다. (예 : [스마트 포인터] (http://en.wikipedia.org/wiki/Smart_pointer#C.2B.2B_smart_pointers "Wikipedia - 스마트 포인터")를 사용하면 메모리 누출없이 예상되는 동작을 볼 수 있습니다) 사실 NOP를 전혀 사용하지 않았다면 똑같은 메모리 누수가 발생합니다. – Lilshieste