से कमजोर_पीआरआर <> बनाना, मैं विकासशील वर्ग के अंदर हटने से रोकने के लिए कच्चे सूचक सूचक को कुछ स्मार्ट सूचक में लपेटना चाहता हूं। सूचक के तहत वस्तु का मालिक वर्ग के बाहर है। तो, boost::shared_ptr
और std::auto_ptr
जैसा दिखता है ठीक नहीं है। निम्नलिखित एक कम उदाहरण है:कच्चे पॉइंटर
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
बेशक, यह संकलन त्रुटि उत्पन्न करता है। कच्चे सूचक (यदि मौजूद है) से weak_ptr
प्रारंभ करने का सही तरीका क्या है?
[साझा \ _ptr और कमजोर \ _ptr के संभावित डुप्लिकेट कर सकते हैं रूपांतरण] (http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
यदि आप अपनी कक्षा के भीतर उस पॉइंटर को हटाने से रोकना चाहते हैं तो उस पर 'हटाएं' को कॉल न करें, और ग्राहकों को पॉइंटर का पर्दाफाश करने वाले एक्सेसर फ़ंक्शंस प्रदान न करें। 'weak_ptr' का मतलब किसी 'shared_ptr' के स्वामित्व वाली किसी ऑब्जेक्ट के गैर-स्वामित्व वाले दृश्य के लिए है। यदि आप किसी भी तरह से 'कमजोर_प्टर' में पॉइंटर को सामान देने में सक्षम थे, तो यह पता नहीं होगा कि पॉइंटर समाप्त हो गया है या नहीं, और यह मुझे 'm_bar.lock हटाएं) को हटाने से रोकता है। (प्राप्त करें); अपनी कक्षा के भीतर। आप 100% बेवकूफ सबूत कभी नहीं बना सकते हैं। – Praetorian