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

周雷

我知道一个班级不能有同一班级的成员,例如

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在编译时知道的完整大小,而不必依赖于指针在运行时指向。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在类构造函数中初始化const向量(C ++)

如何在C#中的同一个构造函数中初始化同一个类

指向构造函数C ++中不同类的指针初始化

是否可以在同一行中用函数声明初始化C的函数指针?

为什么派生类的构造函数要在C ++中初始化虚拟基类?

C ++-在构造函数中初始化指针数组

C++ 传递对同一类中函数的引用

在 C 中初始化包含函数指针的结构

是否可以在C ++中创建指向类的指针

构造函数是在C#中初始化类中非空属性的唯一方法吗?

如何在类的构造函数中初始化对象的2D向量?(C ++)

在C ++中的类构造函数中进行列表初始化

构造函数体中的 C++ 类 const 成员初始化

在C ++中的自定义类的构造函数中初始化没有参数的静态const类成员

是否可以在C ++中的类的静态方法中初始化静态成员?

C ++类可以在头文件中包含内联初始化的静态const std :: array吗?

使用类实例的指针进行初始化是C ++中唯一的吗?

如何在C ++中使用构造函数(只是构造函数)在类中初始化大型私有数组?

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

C ++通过函数初始化类指针

C ++构造函数如何初始化其类的对象?

c ++初始化模板类构造函数

C ++ 11:默认的默认构造函数可以导致部分初始化的类吗?

C ++的类变量可以在没有Java构造函数的情况下初始化吗?

是否可以编写一个抽象类,以便构造函数选择适当的子类在C ++中实例化?

是否考虑 new 关键字类中由默认构造函数初始化的元素也在 C++ 中使用 new 关键字?

继承:构造函数,在C ++ 11中初始化C之类的基类的数组成员

在C ++中编写初始化类

在 C 中初始化指向常量对象的常量指针