在Object的构造函数中声明Object数组?

时间:2012-05-26 23:25:35

标签: c++

如果我有一个MyClass类,我可以在MyClass的构造函数中声明堆上的MyClass数组吗?

我可以在C#中做到这一点,但它在C ++中似乎不喜欢它?

我也得到一个错误,关于MyClass类型没有合适的构造函数?

class MyClass
{
    public:
        MyClass(int);
    private
        MyClass* array;
};


MyClass::MyClass(int size){
    array = new MyClass[size];
}

2 个答案:

答案 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 ...

愤怒,失去记忆。