0

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

我可以在 C# 中执行此操作,但在 C++ 中似乎不喜欢它?

我还收到关于 MyClass 类型没有合适的构造函数的错误?

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


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

2 回答 2

4

为了有一个数组,所说的东西必须是default-constructible。你MyClass不是,因为它需要int构建。

C# 的作用类似于:

MyClass** array = new MyClass*[size];

其中指针是默认可构造的,因此是允许的。基本上,无论何时你SomeObject在 C# 中执行它都相当于SomeObject*在 C++ 中。除了代码效率极低,甚至比 C# 对应的代码还要糟糕,而且到处都会出现泄漏。

于 2012-05-26T23:27:38.330 回答
3

与如何构造数组相比,您的方法存在更基本的问题。

这样想:

class A
{
   A* a;
public:
   A();
};
A::A()
{
   a = new A();
}

发生什么了?您尝试创建一个A; 在构造函数中,new A创建了 a。在构造函数中,new A创建了另一个...

砰,内存不足。

于 2012-05-26T23:49:30.897 回答