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

Bilakah Pembina Salinan Ditakrifkan Pengguna Diperlukan dalam C?

Susan Sarandon
Lepaskan: 2024-10-24 04:39:02
asal
281 orang telah melayarinya

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

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

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!

sumber:php
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