デフォルト コンストラクターを使用しないオブジェクト配列の初期化
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(&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 サイトの他の関連記事を参照してください。