Rumah > pembangunan bahagian belakang > C++ > Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Memerlukan Salinan Sebenar Data Saya?

Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Memerlukan Salinan Sebenar Data Saya?

Barbara Streisand
Lepaskan: 2024-10-27 11:01:30
asal
942 orang telah melayarinya

 Deep Copy vs. Shallow Copy: When Do I Need a True Copy of My Data?

Deep Copy vs. Shallow Copy

Soalan:

Apakah perbezaan utama antara salinan dalam dan salinan cetek?

Jawapan:

Salinan Cetek:

  • Menyalin nilai objek tetapi mengekalkan rujukan kepada objek kongsi.
  • Contoh:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(copy.pi) {}
    };</code>
    Salin selepas log masuk

    Dalam salinan cetek ini, pi merujuk objek int yang sama dalam kedua-dua objek asal dan salinan.

Salinan Dalam:

  • Mencipta salinan lengkap objek asal, termasuk semua objek terbenam.
  • Contoh:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {}
    };</code>
    Salin selepas log masuk

    Dalam salinan dalam ini, pi menunjuk ke objek int baharu dengan nilai yang sama seperti yang asal.

Jenis Pembina Salin:

Pembina salinan lalai bergantung pada gelagat setiap pembina salinan ahli:

  • Untuk jenis skalar, pengendali tugasan lalai digunakan, menghasilkan salinan cetek.
  • Walau bagaimanapun, adalah tidak betul untuk mengatakan bahawa pembina salinan lalai sentiasa melakukan salinan cetek. Ia boleh melaksanakan salinan dalam, atau bahkan gabungan penyalinan dalam dan cetek, bergantung pada gelagat salinan jenis ahli.

Contoh:

Dalam contoh berikut, pembina salinan lalai mencipta salinan dalam untuk ahli std::vector kerana pelaksanaannya:

<code class="c++">class Y {
private:
    std::vector<int> v;
public:
    Y() {}
    Y(const Y& copy) : v(copy.v) {}
};</code>
Salin selepas log masuk

Dalam kes ini, pembina salinan std::vector mencipta salinan mendalam baginya kandungan.

Atas ialah kandungan terperinci Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Memerlukan Salinan Sebenar Data Saya?. 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