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

Bagaimana untuk Memulakan Susunan Objek dalam C Tanpa Pembina Lalai?

Susan Sarandon
Susan Sarandonasal
2024-12-22 11:02:10798semak imbas

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

Permulaan Tatasusunan Objek Tanpa Pembina Lalai

Dalam C , apabila mencipta tatasusunan objek, pembina lalai dipanggil untuk memulakan setiap elemen. Walau bagaimanapun, dalam beberapa kes, anda mungkin menghadapi ralat semasa memulakan tatasusunan objek jika pembina lalai adalah peribadi atau tidak wujud.

Untuk mengatasinya, anda boleh menggunakan teknik penempatan-baru, yang mana menyediakan cara untuk memulakan objek in situ, tanpa menggunakan pembina lalai.

Begini cara anda boleh menggunakan penempatan-baru untuk memulakan tatasusunan objek tanpa pembina lalai:

class Car {
private:
    int _no;
public:
    Car(int no) : _no(no) {}
};

int main() {
    void *raw_memory = operator new[](NUM_CARS * sizeof(Car));
    Car *ptr = static_cast<Car *>(raw_memory);
    for (int i = 0; i < NUM_CARS; ++i) {
        new(&amp;ptr[i]) Car(i);
    }

    // destruct in inverse order
    for (int i = NUM_CARS - 1; i >= 0; --i) {
        ptr[i].~Car();
    }
    operator delete[](raw_memory);

    return 0;
}

Dalam kod ini, raw_memory mewakili blok memori mentah yang digunakan untuk menyimpan susunan objek Kereta. Kami kemudian menghantarnya ke penuding Kereta * dan menggunakan penempatan-baharu untuk membina setiap objek di tempatnya, memulakannya dengan nombor yang ditentukan.

Apabila anda selesai dengan tatasusunan, ingat untuk memusnahkan objek secara terbalik perintah dan padam memori mentah yang diperuntukkan menggunakan penempatan-baru. Pendekatan ini membolehkan anda memulakan tatasusunan objek walaupun pembina lalainya tidak boleh diakses.

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

Kenyataan:
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