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];

ポインタはデフォルトで構築可能であるため、許可されています。基本的に、SomeObjectC# で行うときはいつでもSomeObject*、C++ と同等です。コードがひどく非効率的で、C# の対応物よりもさらに悪いことを除いて、どこでもリークが発生します。

于 2012-05-26T23:27:38.330 に答える
3

ここでのアプローチには、配列の作成方法よりも根本的な問題があります。

このように考えてください:

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

何が起こるのですか?Aあなたは;を作成しようとします。コンストラクター内に、anew Aが作成されます。そのコンストラクター内に、別のコンストラクターnew Aが作成されます...

ブーム、メモリ不足。

于 2012-05-26T23:49:30.897 に答える