ホームページ > バックエンド開発 > C++ > パブリックのデフォルトコンストラクターを使用せずに C でオブジェクト配列を初期化するにはどうすればよいですか?

パブリックのデフォルトコンストラクターを使用せずに C でオブジェクト配列を初期化するにはどうすればよいですか?

DDD
リリース: 2024-12-26 01:57:09
オリジナル
261 人が閲覧しました

How Can I Initialize an Object Array in C   Without a Public Default Constructor?

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

C では、パブリックにアクセス可能なデフォルト コンストラクターを使用せずにオブジェクトの配列を初期化しようとすると、次のようなエラーが発生します。以下のコード スニペット:

class Car
{
private:
  Car(){}; // Default constructor hidden
};

int main()
{
  Car *cars = new Car[10]; // Error: Default constructor not accessible
}
ログイン後にコピー

このエラーは、Car のプライベート デフォルト コンストラクターが実行できないために発生します。直接呼び出されます。ただし、デフォルトのコンストラクターを公開せずにそのような配列を作成できる解決策があります。

解決策: Placement-New

Placement-new は、作成を可能にする手法です。指定されたメモリ位置にオブジェクトを直接保存します。これを使用すると、デフォルトのコンストラクターのアクセシビリティ制限をバイパスできます。以下のコードは、その使用法を示しています。

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

int main()
{
  void *raw_memory = operator new[](NUM_CARS * sizeof(Car)); // Allocate raw memory
  Car *cars = static_cast<Car *>(raw_memory);
  // Initialize objects at specific memory locations
  for (int i = 0; i < NUM_CARS; ++i) {
    new(&amp;cars[i]) Car(i);
  }
}
ログイン後にコピー

placement-new を利用すると、パブリックなデフォルト コンストラクターを必要とせずに、割り当てられたメモリ位置にオブジェクトを作成できます。

結論

placement-new を使用すると、デフォルトのコンストラクターがプライベートであってもオブジェクトの配列を初期化できるようになります。この手法により柔軟性が高まり、カプセル化の原則を損なうことなく複雑なオブジェクト配列を作成できるようになります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート