C++为什么不能在类中定义该类的对象
Posted Jqivin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++为什么不能在类中定义该类的对象相关的知识,希望对你有一定的参考价值。
一、C++可以在类中定义该类的对象吗?
不能,但是可以定义静态对象、该对象的指针或者引用。
原因:我们创建这个对象,但是这个对象中又有一个对象,比如
class A
{
A a
};
创建一个对象A a1,a1里面又有对象a,这个对象里面还有一个对象。这样一直创建下去,直到内存耗尽,出现栈溢出。
二、为什么可以定义静态对象?
因为静态的成员不在对象的内部,在data区,被这个类共享。所以不会出现递归创建。
也可以定义指针和引用,但是这个指针和引用的赋值必须是通过构造函数的参数传过来的,不能new出来。
class A
{
private:
A* s;
public:
A() { s = new A(); } //会出错,也会导致栈溢出
A(const A& s) = delete;
A& operator=(const A& s) = delete;
// A a; 编译不通过
static A a; //可以
};
int main()
{
A s;
return 0;
}
以上是关于C++为什么不能在类中定义该类的对象的主要内容,如果未能解决你的问题,请参考以下文章