Versi Singkat:
Apakah ada alasan yang dapat diterima untuk menggunakan pointer non-pintar di C++ modern?
Jawaban singkat:
Tentu saja, jika mereka hanya berfungsi untuk observasi, artinya mereka bukan pemilik pointee tersebut. Namun, cobalah untuk menggunakan referensi alih-alih petunjuk bahkan dalam kasus ini; gunakan pointer hanya jika Anda benar-benar perlu menjadikannya opsional (inisialisasi dengan null_ptr
lalu tetapkan kembali nanti, misalnya).
Versi Panjang:
kami memiliki produk besar yang berisi banyak kode C++ lama dan sekarang kami mencoba memfaktorkannya kembali ke era C++ modern. [...]
Jawaban panjang:
Saat saya membaca baris-baris ini, jawaban ini muncul di benak saya:
Saya berharap saya dapat memberi suara positif pada jawaban ini lebih dari sekali. Saya akan mengutip: "[...] untuk setiap faktor ulang yang telah kita buat, kita dapat membenarkan 'perubahan spesifik ini akan membuat tugas sebenarnya yang kita lakukan sekarang menjadi lebih mudah'. Daripada 'ini sekarang lebih bersih untuk pekerjaan di masa depan '."
Singkat cerita, jangan lakukan refactoring besar-besaran kecuali Anda benar-benar membutuhkannya.
Jadi pertanyaannya adalah: apakah ada yang namanya penggunaan smart pointer secara berlebihan?
Menurut pendapat saya, std::shared_ptr
digunakan secara berlebihan. Sangat nyaman digunakan, dan memberi Anda ilusi bahwa Anda tidak perlu memikirkan masalah kepemilikan. Tapi itu bukanlah gambaran keseluruhan. Saya sepenuhnya setuju dengan Sean Parent: "penunjuk bersama sama baiknya dengan variabel global." Petunjuk bersama juga dapat menimbulkan masalah kepemilikan yang sangat sulit, dll.
Di sisi lain, jika Anda perlu mengalokasikan sesuatu di heap, gunakan unique_ptr
. Anda tidak boleh menggunakannya secara berlebihan, jika Anda benar-benar memerlukan alokasi heap. Menurut pengalaman saya, menggunakan unique_ptr
juga menghasilkan kode yang lebih bersih dan mudah dipahami, karena masalah kepemilikan menjadi cukup jelas.
Pembicaraan menarik dari Sean Parent tentang cara menghindari/mengurangi penggunaan pointer adalah:
Semoga ini membantu.
person
Ali
schedule
17.10.2013