ホームページ >バックエンド開発 >C++ >デフォルトのコンストラクターを使用せずに C でオブジェクト配列を初期化する方法

デフォルトのコンストラクターを使用せずに C でオブジェクト配列を初期化する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 11:02:10798ブラウズ

How to Initialize an Object Array in C   Without a Default Constructor?

デフォルト コンストラクターを使用しないオブジェクト配列の初期化

C では、オブジェクトの配列を作成するときに、デフォルト コンストラクターを呼び出して各要素を初期化します。ただし、場合によっては、デフォルトのコンストラクターがプライベートであるか存在しない場合、オブジェクトの配列を初期化するときにエラーが発生することがあります。

これを克服するには、place-new の手法を使用できます。デフォルトのコンストラクターを呼び出すことなく、その場でオブジェクトを初期化する方法を提供します。

ここでは、placement-new を使用して、デフォルトを使用せずにオブジェクトの配列を初期化する方法を示します。 constructor:

class Car {
private:
    int _no;
public:
    Car(int no) : _no(no) {}
};

int main() {
    void *raw_memory = operator new[](NUM_CARS * sizeof(Car));
    Car *ptr = static_cast<Car *>(raw_memory);
    for (int i = 0; i < NUM_CARS; ++i) {
        new(&amp;ptr[i]) Car(i);
    }

    // destruct in inverse order
    for (int i = NUM_CARS - 1; i >= 0; --i) {
        ptr[i].~Car();
    }
    operator delete[](raw_memory);

    return 0;
}

このコードでは、raw_memory は Car オブジェクトの配列を格納するために使用される生のメモリ ブロックを表します。次に、それを Car * ポインターにキャストし、placement-new を使用して所定の位置に各オブジェクトを構築し、指定された番号で初期化します。

配列の作成が完了したら、オブジェクトを逆に破棄することを忘れないでください。 place-new を使用して割り当てられた生のメモリを順序付けして削除します。このアプローチにより、デフォルトのコンストラクターにアクセスできない場合でも、オブジェクトの配列を初期化できます。

以上がデフォルトのコンストラクターを使用せずに C でオブジェクト配列を初期化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。