#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()
पर कॉल करते समय मुझे std::bad_weak_ptr
अपवाद मिल रहा है। क्या यह डिजाइन द्वारा है? हां, यह खतरनाक हो सकता है क्योंकि इस सूचक का उपयोग विनाशक रिटर्न के बाद नहीं किया जा सकता है, लेकिन मुझे कोई कारण नहीं दिख रहा है कि यह पॉइंटर प्राप्त करने के लिए तकनीकी रूप से असंभव क्यों होगा, क्योंकि साझा पॉइंटर ऑब्जेक्ट स्पष्ट रूप से अभी भी मौजूद है और हो सकता है उपयोग किया गया। क्या इसे रोकने के लिए कोई रास्ता है, अपना खुद का enable_shared_from_this
एनालॉग लिखने से कम (जो मैं नहीं करूँगा)?std :: enable_shared_from_this: क्या इसे destructor में shared_from_this() को कॉल करने की अनुमति है?
http://stackoverflow.com/q/8501503/1147772 – Drax
@Drax: मैंने यह प्रश्न देखा है। यह 'बूस्ट' से संबंधित है और 'std' नहीं है, और उत्तर 'shared_from_this()' उपलब्धता पर मूल सीमाओं के बजाय प्रश्न के कोड के विशिष्ट डिज़ाइन के बारे में बात करते हैं। –
@VioletGiraffe प्रश्न न तो 'बूस्ट' और न ही 'std', केवल कमजोर संदर्भ की अवधारणा से संबंधित है। – curiousguy