2013-12-21 7 views
0

이것은 cpp 과정의 숙제를위한 것으로 모범 사례를 찾고 있습니다.cpp LinkedList 및 노드. 데이터가 포인터 또는 참조 여야합니까?

나는 linkedlist 클래스에 저장하고 싶은 다소 복잡한 클래스가 있습니다. 노드 클래스를 포함하여 내 자신을 구현해야합니다. 내가 작업하고있는이 상대적으로 복잡한 유형 하나만 저장해야합니다.

노드의 데이터 유형을 복합 유형에 대한 참조로 만들어야합니까, 아니면 대신 포인터로 사용해야합니까?

옵션 1 :

class Node 
{ 
public: 
    Node* prev; 
    Node* next; 
    ComplexType *data; 
} 

옵션 2 :

class Node 
{ 
public: 
    Node* prev; 
    Node* next; 
    ComplexType &data; 
} 

레퍼런스 솔루션을 작업 할 때 나는 또한 복사 값의 서로 다른 경우를 처리해야합니다 가정. 어느 것이 더 정확한 것으로 간주됩니까? 그리고 왜?

+1

'ComplexType' 객체를 저장하지 않는 이유는 무엇입니까? – juanchopanza

답변

1

참조가 초기화 되 자마자 다른 참조로 다시 변경할 수 없습니다. 따라서 포인터를 사용하면 목록이 더 유용하고 유연 해집니다.

1

아마도 data null을 가질 수 있고 건설 후 변경해야합니다. 이 경우에는 다양한 포인터가 필요합니다.

2

옵션 2로 갈 것입니다. 이전과 다음은 변경 될 수 있으므로 포인터가되어야합니다. 노드 데이터는 목록에서 변경되어서는 안됩니다. 목록의 위치 만 prev/next 포인터를 변경하여 변경해야합니다. 제 의견으로는 가능한 한 포인터를 사용하지 못하도록하는 것이 최선이지만, 바꿀 수 있기 때문에 이전/다음 멤버는 포인터 여야합니다.