如果我有一个MyClass类,我可以在MyClass的构造函数中声明堆上的MyClass数组吗?
我可以在C#中做到这一点,但它在C ++中似乎不喜欢它?
我也得到一个错误,关于MyClass类型没有合适的构造函数?
class MyClass
{
public:
MyClass(int);
private
MyClass* array;
};
MyClass::MyClass(int size){
array = new MyClass[size];
}
答案 0 :(得分:4)
为了得到一些东西,说某些东西必须是 default-constructible 。您的MyClass
不是,因为它需要构建int
。
C#的作用与:
相当MyClass** array = new MyClass*[size];
指针是默认可构造的,所以允许它。基本上,无论何时在C#中SomeObject
,它都相当于C ++中的SomeObject*
。除了代码效率非常低,甚至比它的C#版本差,并且到处都会出现泄漏。
答案 1 :(得分:3)
这里你的方法比如何构造数组有一个更基本的问题。
以这种方式思考:
class A
{
A* a;
public:
A();
};
A::A()
{
a = new A();
}
会发生什么?您尝试创建A
;在构造函数中,创建了new A
。在 构造函数中,创建了另一个new A
...