在对象的构造函数中声明对象的数组?

Declare array of Object, within the Object's constructor?

本文关键字:对象 数组 声明 构造函数      更新时间:2023-10-16

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

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

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

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

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

为了有一个东西的数组,所说的东西必须是默认可构造的。您的MyClass不是,因为它需要构建int

C# 的作用与以下各项相当:

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

指针是默认可构造的,因此允许。基本上,每当你在 C# 中执行SomeObject时,它就相当于在 C++ 中SomeObject*。除了代码效率低下,甚至比 C# 对应代码更糟糕,并且到处都有泄漏。

你在这里的方法有一个比如何构造数组更根本的问题。

这样想:

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

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

轰,出记忆。