首頁 >後端開發 >C++ >如何在沒有公共預設構造函數的情況下在 C 中初始化物件數組?

如何在沒有公共預設構造函數的情況下在 C 中初始化物件數組?

DDD
DDD原創
2024-12-26 01:57:09268瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn