Bilakah Anda Harus Melaksanakan Pembina Salinan Ditakrifkan Pengguna dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-10-23 17:49:49
asal
958 orang telah melayarinya

When Should You Implement a User-Defined Copy Constructor in C  ?

Bilakah Pembina Salinan Ditakrifkan Pengguna Diperlukan?

Penyusun C secara automatik menjana pembina salinan untuk kelas, yang melaksanakan dari segi ahli menyalin secara lalai. Walau bagaimanapun, dalam situasi tertentu, kami mungkin perlu mentakrifkan pembina salinan takrif pengguna kami sendiri.

Sebab Untuk Menentukan Pembina Salin Takrif Pengguna:

  • Penyalinan Dalam: Apabila pembolehubah ahli kelas memperuntukkan memori dinamik yang perlu disalin secara berasingan, penyalinan mengikut ahli tidak mencukupi. Dalam kes sedemikian, pembina salinan yang ditentukan pengguna diperlukan untuk melakukan penyalinan dalam, yang mencipta salinan baharu memori dinamik untuk pembolehubah ahli objek.

Contoh:

Pertimbangkan kelas berikut yang menyimpan rentetan aksara:

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

Dengan pembina salinan lalai, ahli yang disimpan hanya akan disalin melalui rujukan, yang membawa kepada tingkah laku yang tidak ditentukan apabila salah satu salinan adalah musnah. Untuk mengelakkan ini, kami mentakrifkan pembina salinan takrif pengguna 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

Selain itu, pembina salinan takrif pengguna juga diperlukan untuk pengendali tugasan melaksanakan penyalinan dalam dengan betul:

<code class="cpp">void Class::operator = (const Class& another) {
    char* temp = new char[strlen(another.stored) + 1];
    strcpy(temp, another.stored);
    delete[] stored;
    stored = temp;
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bilakah Anda Harus Melaksanakan Pembina Salinan Ditakrifkan Pengguna 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!