देखें: http://boost.org/doc/libs/1_42_0/libs/smart_ptr/sp_techniques.html#in_constructor
मुद्दा यह है कि वस्तु का निर्माण नहीं कर रहा है नहीं है। मुद्दा यह है कि साझा_प्टर का निर्माण नहीं किया गया है। यदि आप केवल एक साझा_ptr बनाना चाहते थे और इसे कहीं से भेजना चाहते थे तो सबकुछ ठीक होगा। यह तब होता है जब आप उस वस्तु को शामिल करने के लिए shared_ptr बनाने का प्रयास करते हैं जिसे आपने अभी बनाया है। दोनों को जोड़ने का कोई तरीका नहीं है और इस प्रकार आपको एक बड़ी समस्या है।
जिस तरह से साझा_from_this काम करता है वह यह है कि यह आपको उम्मीद है कि ऑब्जेक्ट को साझा करने के लिए साझा_from_this को कॉल करने से पहले साझा_from_this को कॉल करने से पहले। चूंकि आपने अभी तक ऐसा नहीं किया है, क्योंकि ऑब्जेक्ट का कन्स्ट्रक्टर समाप्त नहीं हुआ है और इस प्रकार shared_ptr इससे कनेक्ट नहीं है, आप shared_from_this को कॉल नहीं कर सकते हैं।
आप कमजोर_ptr के साथ बिल्कुल वही समस्या होगी।
तो, दूसरे शब्दों में, यह बेतुका निर्माण काम करेगा:
struct absurd
{
absurd()
{
register(shared_ptr<absurd>(this));
}
};
...
new absurd; // better not assign to a shared_ptr!!!
लेकिन क्या तुम सच में ऐसा करने के लिए नहीं करना चाहती।
स्रोत
2011-01-04 22:20:09
क्या आप 'weak_from_raw() 'पर चर्चा करने वाले फ़ोरम पोस्ट पर एक लिंक पोस्ट कर सकते हैं? –
ऐसा मत सोचो, "weak_ptr किसी ऑब्जेक्ट को" कमजोर संदर्भ "संग्रहीत करता है जो पहले से ही shared_ptr द्वारा प्रबंधित किया जाता है"। – ronag
@ सैम http://groups.google.com/group/boost-list/browse_thread/thread/36d8e06194227408/5625f636b47fdb96?pli=1 – James