何时使用指针成员变量

When to use pointer member variables?

本文关键字:变量 成员 指针 何时使      更新时间:2023-10-16

我意识到这是一个非常基本的问题,但我想看看一个示例,说明何时应该将我的一些类成员变量设置为指针。

我看到了这个类定义:

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声明为指针,而是声明为值:

Node<T> next;

然后,当您分配给next时,您将创建原始对象的新副本,从而导致您拥有两个不相关和未连接的副本。

指针正是它听起来的样子,它指向其他对象。这就像说"下一个对象是那边的那个"。

指针对于任何需要动态的东西都是必不可少的,比如链表。

类节点表示一个链表,然后为了指向链表的下一个节点,您将需要一个变量,但您希望列表动态增长,因此您可以随时创建一个新节点,并通过下一个指针将其链接到链表的其余部分,在该指针中存储新创建节点的地址。
此外,如果 next 不是指针,则 sizeof Node 将无法计算其大小,因为数据成员的类型相同,因此它将再次尝试计算大小,因此这是一个编译器错误。在指针的情况下,所有指针变量都是 4 字节,所以没有问题。