c++ - 在 C++ 中,一个类是否可以包含指向在构造函数中初始化的同一类的指针?

标签 c++ pointers

我知道一个类(class)不能有同一类(class)的成员,例如

class Sample {
    int a = 0;
    Sample s; // error, object would need infinite size
};

但是为什么有一个指针就可以了呢?

class Sample {
    // this compiles, but isn't it essentially the same
    // as above? 
    Sample() { s = new Sample(); } 
    int a = 0;
    Sample *s; 
};

最佳答案

允许将指针作为成员,因为指针具有固定大小(在 32 位应用程序中为 4 个字节,在 64 位应用程序中为 8 个字节),因此编译器可以知道 Sample 的完整大小在编译时,它不依赖于指针在运行时指向什么。

Sample 构造函数内部创建Sample 的实例不是语法错误,因此编译器允许这样做,但会在运行时导致无限递归循环。所以不要这样做。

关于c++ - 在 C++ 中,一个类是否可以包含指向在构造函数中初始化的同一类的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061380/

相关文章:

c++ - (1)为什么它不能识别这是一个回文&(2)我如何让它打印带有空格的原始输入?

javascript - 用于科学可视化的 C++/Javascript 通信方法

C 奇怪的指针算术

c - 如何使函数中的指针更改C中的指针

c++ - 从表中检索混合数据类型的模板化 get 方法

.net - 无法从 'WCHAR' 转换为 'WCHAR [260]'

Objective-C:一个在不同时间指向不同类的指针

创建指向指针数组的指针

c - 我是否需要释放 localtime() 函数返回的指针?

c++ - 标准授权 enable_shared_from_this 是否公开继承?为什么?