#include <memory>
#include <iostream>
struct A : public std::enable_shared_from_this<A>
{
~A()
{
auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here.
std::cout << "this: " << this_ptr;
}
};
int main()
{
auto a = std::make_shared<A>();
a.reset();
return 0;
}
shared_from_this()
numaralı telefonu arayarak std::bad_weak_ptr
istisnası alıyorum. Tasarım gereği mi? Evet, bu işaretçi destroyerin geri döndükten sonra kullanılamayacağı için tehlikeli olabilir, ancak işaretçiyi buraya almak için teknik olarak imkansız bir neden göremiyorum çünkü paylaşılan işaretçi nesnesi hala var ve Kullanılmış. Bunu atlatmanın herhangi bir yolu var mı, kendi enable_shared_from_this
analogumu yazmam (kısa bir süre yapmamayı tercih ediyorum)?std :: enable_shared_from_this: destroctor'da shared_from_this() öğesini çağırmasına izin verilir mi?
http://stackoverflow.com/q/8501503/1147772 – Drax
@Drax: Bu soruyu gördüm. Bu, 'std' değil 'destek' ile ilgilidir ve cevaplar 'shared_from_this()' kullanılabilirliği üzerindeki temel sınırlamalardan ziyade söz konusu kodun özel tasarımı hakkında konuşur. –
@VioletGiraffe Soru, ne “ne” ne de “std”, sadece zayıf referans kavramıyla ilgilidir. – curiousguy