Rumah >pembangunan bahagian belakang >C++ >Bilakah Pembina Salinan Ditakrifkan Pengguna Diperlukan dalam C?

Bilakah Pembina Salinan Ditakrifkan Pengguna Diperlukan dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-24 04:39:02266semak imbas

When is User-Defined Copy Constructor Necessary in C  ?

Pembina Salinan Ditakrifkan Pengguna dalam C

Dalam C , pengkompil biasanya menjana pembina salinan lalai untuk kelas, yang melaksanakan dari segi ahli meniru. Walau bagaimanapun, dalam senario tertentu, pembina salinan takrif pengguna diperlukan.

Bilakah pembina salinan takrif pengguna diperlukan?

Pembina salinan takrif pengguna adalah diperlukan apabila tingkah laku penyalinan ahli pembina salinan lalai tidak mencukupi. Pertimbangkan contoh berikut:

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};

Class::Class(const char* str) {
    stored = new char[srtlen(str) + 1];
    strcpy(stored, str);
}

Class::~Class() {
    delete[] stored;
}</code>

Dalam contoh ini, pembina salinan lalai hanya akan menyalin penuding kepada ahli yang disimpan, dan bukannya menduplikasi penimbal asas. Ini boleh membawa kepada tingkah laku yang tidak ditentukan jika satu salinan dimusnahkan sebelum yang lain.

Pembina Salinan Ditakrifkan Pengguna

Untuk menangani perkara ini, anda boleh menentukan salinan yang ditentukan pengguna pembina yang melakukan penyalinan dalam:

<code class="cpp">Class::Class(const Class& another) {
    stored = new char[strlen(another.stored) + 1];
    strcpy(stored, another.stored);
}</code>

Pembina salinan ini memperuntukkan memori baharu dan menyalin kandungan ahli yang disimpan, memastikan kedua-dua salinan mempunyai penimbal bebasnya sendiri.

Atas ialah kandungan terperinci Bilakah Pembina Salinan Ditakrifkan Pengguna Diperlukan dalam C?. 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