沒有預設建構子的物件陣列初始化
當嘗試初始化缺少預設建構子的物件陣列時,程式設計師經常會遇到錯誤「 X::X() 在此上下文中是私有的」。出現此錯誤的原因是預設建構函式通常會設定為 private 以防止無意的物件建立。
一種解決方案是使用placement-new,這是一個低階 C 運算符,允許將物件直接建構到一個區塊中記憶。以下是一個範例:
class Car { int _no; public: Car(int no) : _no(no) // Initialize _no directly { } }; int main() { int userInput = 10; void *rawMemory = operator new[](userInput * sizeof(Car)); // Allocate raw memory Car *myCars = static_cast<Car *>(rawMemory); // Cast to Car * for (int i = 0; i < userInput; ++i) { new(&myCars[i]) Car(i); // Construct Car objects in-place using placement-new } // Destruct objects in reverse order for (int i = userInput - 1; i >= 0; --i) { myCars[i].~Car(); // Destroy the object using placement-delete } operator delete[](rawMemory); // Release raw memory return 0; }
此技術提供了一種在不修改建構函式的存取說明符的情況下初始化物件陣列的方法。它遵循最佳實踐,避免不必要的預設建構函數,同時實現靈活且高效的物件建立。
以上是如何在 C 中沒有預設構造函數的情況下初始化物件數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!