Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memulakan Susunan Objek Tanpa Pembina Lalai dalam C?

Bagaimana untuk Memulakan Susunan Objek Tanpa Pembina Lalai dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-22 20:52:24
asal
909 orang telah melayarinya

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

Permulaan Tatasusunan Objek tanpa Pembina Lalai

Apabila cuba memulakan tatasusunan objek yang tidak mempunyai pembina lalai, pengaturcara sering menghadapi ralat " X::X() adalah peribadi dalam konteks ini". Ralat ini timbul kerana pembina lalai biasanya ditetapkan kepada peribadi untuk mengelakkan penciptaan objek yang tidak disengajakan.

Satu penyelesaian ialah menggunakan penempatan-baru, pengendali C peringkat rendah yang membenarkan objek dibina terus ke dalam blok ingatan. Berikut ialah contoh:

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;
}
Salin selepas log masuk

Teknik ini menyediakan cara untuk memulakan tatasusunan objek tanpa mengubah suai penentu akses pembina. Ia mematuhi amalan terbaik dengan mengelakkan pembina lalai yang tidak perlu sambil mendayakan penciptaan objek yang fleksibel dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Susunan Objek Tanpa Pembina Lalai dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan