shared_ptr vs unique_ptr


Jawaban 1:

Keduanya adalah contoh smart pointer. Manfaat tambahan mereka daripada menggunakan pointer mentah adalah manajemen memori otomatis sumber daya yang dialokasikan secara dinamis, sehingga Anda tidak perlu membuat panggilan eksplisit untuk menghapus. Biasanya merupakan ide yang baik untuk menggunakannya, karena mereka tidak hanya membantu mencegah kebocoran memori tetapi juga kepemilikan dokumen diri.

Gunakan shared_ptr ketika Anda menumpuk-mengalokasikan sumber daya yang perlu dibagi di antara beberapa objek. Ini mempertahankan jumlah referensi secara internal dan hanya menghapus sumber daya ketika jumlah referensi menjadi nol.

Gunakan unique_ptr ketika sebuah objek mengklaim kepemilikan sumber daya. Artinya, objek bertanggung jawab untuk mengelola memori sumber daya, menghapusnya ketika destruktor itu sendiri dipanggil. Juga, perhatikan bahwa operator penugasan Unique_ptr hanya menerima nilai, yang harus disediakan oleh std :: move semantic.


Jawaban 2:

Cukup jelas bagaimana unique_ptr berguna sebagai tipe untuk anggota data, karena menjamin pembersihan di destruktor. Namun, nilai lengkapnya berasal dari menggunakannya sebagai parameter dan jenis nilai pengembalian setiap kali Anda mentransfer kepemilikan eksklusif.

Jadi, misalnya, fungsi pabrik yang membuat Foo baru dan mengembalikannya harus melakukannya sebagai unique_ptr bukan Foo *. Demikian juga, fungsi yang mengambil kepemilikan Foo harus menerima unique_ptr parameter. bukan Foo *.

Saya telah menggunakan lebih sedikit untuk shared_ptr , karena ini untuk kepemilikan non-eksklusif dengan penghitungan referensi. Terus terang, ini tidak muncul banyak dalam kode saya.


Jawaban 3:

Keduanya adalah pointer cerdas yang akan melepaskan sumber daya ketika tidak lagi direferensikan. a) unique_ptr Gunakan unique_ptr ketika jika Anda ingin memiliki kepemilikan tunggal (Eksklusif) sumber daya. Hanya satu unique_ptr yang dapat mengarah ke satu sumber. Karena mungkin ada satu unique_ptr untuk sumber daya tunggal, tidak mungkin untuk menyalin satu unique_ptr ke yang lain. b) shared_ptr Gunakan shared_ptr jika Anda ingin berbagi kepemilikan sumber daya. Banyak shared_ptr dapat mengarah ke sumber daya tunggal. shared_ptr mempertahankan jumlah referensi untuk proposal ini. ketika semua shared_ptr yang menunjuk ke sumber daya keluar dari ruang lingkup sumber daya dihancurkan.