在C 中,當嘗試在沒有可公開存取的預設建構子的情況下初始化物件陣列時,會遇到錯誤,如程式碼片段如下:
class Car { private: Car(){}; // Default constructor hidden }; int main() { Car *cars = new Car[10]; // Error: Default constructor not accessible }
出現此錯誤是因為無法直接呼叫Car 的私有預設建構子。但是,有一個解決方案允許創建這樣的數組而不將預設構造函數公開。
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(&cars[i]) Car(i); } }
透過利用placement-new,可以在分配的記憶體位置建立對象,而不需要公共預設建構子。
透過使用placement-new,即使預設建構子是私有的,也可以初始化物件陣列。這種技術提供了更大的靈活性,並允許在不影響封裝原則的情況下建立複雜的物件陣列。
以上是如何在沒有公共預設構造函數的情況下在 C 中初始化物件數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!