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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 20:52:24832瀏覽

How to Initialize an Array of Objects Without a Default Constructor in C  ?

沒有預設建構子的物件陣列初始化

當嘗試初始化缺少預設建構子的物件陣列時,程式設計師經常會遇到錯誤「 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中文網其他相關文章!

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