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++为什么不能在类中定义该类的对象的主要内容,如果未能解决你的问题,请参考以下文章

类中的@staticmethod

类与对象的认识

C++要点总结

C++函数调用运算符 函数对象 函数指针

对象的深拷贝和浅拷贝

友元函数