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
Barbara Streisandasal
2024-10-27 11:01:30914semak imbas

 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>

    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>

    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>

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!

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