我意识到这是一个非常基本的问题,但是我想看一个关于何时应该将我的一些类成员变量设置为指针的示例。
我看到了这个类的定义:
template<class T>
class Node
{
public:
T data;
Node<T> * next;
Node<T>(const T& d):data(d), next() {}
Node<T>(const Node<T>& copyNode) : data(copyNode.data), next() {}
private:
Node<T>& operator=(const Node<T>&);
};
我不确定为什么next应该是指针成员变量?
答案 0 :(得分:2)
为了论证,我们假设你没有声明next
是一个指针,而是一个值:
Node<T> next;
然后,当您分配到next
时,您会创建原始对象的新副本,从而导致您拥有两个不相关且未连接的副本。
指针正是它听起来的样子,它指向指向其他对象。这就像说“下一个对象是那边的那个”。
指针对于任何需要动态的内容都很重要,例如链表。
答案 1 :(得分:0)
类节点表示链接列表然后指向链接列表的下一个节点,您将需要一个变量,但您希望列表动态增长,这样您就可以随时创建一个新节点并将其链接到其余的通过下一个指针链接列表,在该指针中存储新创建的节点的地址 此外,如果next不是指针,那么sizeof Node将无法计算其大小,因为数据成员是相同类型的,因此它将再次尝试计算大小,因此它是编译器错误。如果是指针,则所有指针变量是4字节,因此没有问题。