Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengendalikan Penunjuk Unik Semasa Menyalin Kelas?

Bagaimana Mengendalikan Penunjuk Unik Semasa Menyalin Kelas?

Patricia Arquette
Lepaskan: 2024-12-15 16:00:24
asal
696 orang telah melayarinya

How to Handle Unique Pointers When Copying a Class?

Menyalin Penunjuk Unik dalam Kelas

Menyalin kelas yang mengandungi penunjuk unik sebagai ahli memerlukan pertimbangan khusus. Penunjuk unik tidak boleh dikongsi, yang memerlukan sama ada salinan mendalam kandungannya atau penukaran kepada penuding dikongsi.

Penyalinan Dalam

Pendekatan salinan mendalam mencipta penuding unik baharu dan memulakannya dengan salinan kandungan penuding asal:

class A
{
   std::unique_ptr<int> up_;

public:
   A(int i) : up_(new int(i)) {}
   A(const A& a) : up_(new int(*a.up_)) {}
};
Salin selepas log masuk

Di sini, A's copy constructor deep menyalin int yang ditunjuk oleh penuding unik asal.

Penukaran kepada Penunjuk Dikongsi

Sebagai alternatif, anda boleh menukar penuding unik kepada penuding dikongsi, yang membolehkannya dikongsi antara berbilang objek:

class B
{
   std::unique_ptr<int> up_;

public:
   B(int i) : up_(new int(i)) {}
   B(const B& b)
   {
      up_ = std::make_shared(*b.up_);
   }
};
Salin selepas log masuk

Dalam contoh ini, salinan B pembina menukar penuding unik kepada penuding dikongsi, membolehkan berbilang salinan B untuk mengakses data asas yang sama.

Operator Lain

Untuk berfungsi dengan lancar dengan bekas, seperti std ::vektor, pengendali tambahan biasanya diperlukan:

  • Move Constructor:

    B(B&& b)
    {
     up_ = std::move(b.up_);
    }
    Salin selepas log masuk
  • Salin Tugasan:

    B& operator=(const B& b)
    {
     up_ = std::make_shared(*b.up_);
     return *this;
    }
    Salin selepas log masuk
  • Bergerak Tugasan:

    B& operator=(B&& b)
    {
     up_ = std::move(b.up_);
     return *this;
    }
    Salin selepas log masuk

Pengendali ini memastikan objek boleh ditugaskan dan disalin dengan selamat dalam pelbagai konteks.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Penunjuk Unik Semasa Menyalin Kelas?. 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