何时使用指针成员变量
When to use pointer member variables?
我意识到这是一个非常基本的问题,但我想看看一个示例,说明何时应该将我的一些类成员变量设置为指针。
我看到了这个类定义:
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 字节,所以没有问题。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组