Saya telah berpikir bahwa meskipun saya memahami tujuan std::observer_ptr saya pikir itu akan terjadi alangkah baiknya jika setidaknya ada opsi untuk tipe penunjuk serupa yang mengetahui apakah yang ditunjuknya telah dihapus. Misalnya, kita dapat memiliki sesuatu seperti berikut ini
slightly_smart_ptr<Foo> p1(new Foo());
auto p2 = p1;
p1.erase(); // This deletes the foo referred to by p1.
if (p2.expired())
std::cout << "p2 is expired\n"; // this will fire
Salah satu cara untuk mencapai hal ini dengan perpustakaan standar saat ini adalah dengan membuat shared_ptr ke A dalam beberapa cakupan yang akan ada seumur hidup A, selalu merujuk ke A dengan melewatkan Weak_ptrs di sekitar, dan menghapus A ketika tidak diperlukan lagi dengan menyetel ulang shared_ptr. Weak_ptrs di sini akan memiliki semantik dasar pengamat_ptrs yang mengetahui apakah A telah dihapus. Tetapi ada masalah dengan pendekatan ini: kelemahan_ptrs harus dikunci, mengubahnya menjadi shared_ptrs untuk digunakan, yang terasa tidak rapi, tetapi yang lebih serius adalah shared_ptrs ke A harus ada di suatu tempat, ketika yang diinginkan pengguna hanyalah penunjuk yang sedikit cerdas yang tidak dimilikinya konten apa pun. Pengguna setuju untuk menghancurkan konten secara manual ketika waktunya tiba: tidak ada kepemilikan yang dibagikan sehingga merupakan bau kode bagi pengguna untuk membuat shared_ptr dalam situasi seperti itu.
Namun saya tidak dapat memikirkan cara untuk menyembunyikan detail implementasi ini secara efektif.
Apakah penunjuk seperti itu juga ada sebagai proposal atau di perpustakaan tambahan atau di tempat lain?
shared_ptr
danweak_ptr
. Tidak peduli bagaimana Anda mendesainnya, Anda perlu mengunci objek tersebut sehingga satu penunjuk tidak menghapusnya saat penunjuk lain menggunakannya. - person super   schedule 16.08.2019if(ptr.valid()) { stuff(); ptr->a; }
Fungsistuff()
dapat membuat pointer tidak valid, jadi Anda harus memeriksanya sebelum setiap pernyataan - person Guillaume Racicot   schedule 16.08.2019