c++ - strange behavior with boost::bind in virtual member function -
मेरे दो वर्ग हैं, उनमें से एक वर्चुअल फ़ंक्शन है
class OKClass {public: void PrintTest () {Std :: cout & lt; & lt; "ठीक कक्षा से प्रिंट" & lt; & lt; std :: endl; }}; क्लास क्रैश क्लास {सार्वजनिक: आभासी शून्य प्रिंटटैस्ट () {std :: cout & lt; & lt; "वर्चुअल क्रैश क्लास से प्रिंट" & lt; & lt; std :: endl; }}; मैं निम्नलिखित क्लास कोड में दो क्लास डालता हूं, जब क्रैश क्लास क्रैश हो जाता है, जब कॉल फंक () ओकक्लास को "ओके क्लास से प्रिंट" शब्द प्रिंट करता है, जिसे नहीं करना चाहिए। जब से गुंजाइश के बाहर साझा आईपीटीआर परीक्षा जारी की गई थी क्या कोई यह समझा सकता है कि यह अजीब बात क्यों है?
धन्यवाद
boost :: function0 & lt; void & gt; समारोह; {Boost :: shared_ptr & lt; क्रैश क्लास & gt; परीक्षण (नया क्रैश क्लास); Func = boost :: bind (& CrashClass :: PrintTest, boost :: bind (& CrashClass :: wptr :: lock, CrashClass :: wptr (परीक्षण)); } फ़ेन्क ();
जानकारी की कमी के लिए sry
typedef बढ़ावा :: weaked_ptr & lt; क्रैश क्लास & gt; मुझे पता है कि पहला वर्ग क्यों काम करता है, और दूसरा दुर्घटनाग्रस्त हो गया है
और मैंने इस समस्या को हल करने के लिए एक फ़ैक्टर का उपयोग किया है < P> धन्यवाद
यह जानने के बिना कि wptr क्या है, मैं केवल अनुमान लगा सकता हूँ कि जब परीक्षण दायरे से बाहर हो जाता है , क्रैश क्लास का उदाहरण हटाया जा रहा है। यदि यह मामला है, तो आपको दुर्घटना को रोकने के लिए ब्रेसिज़ को हटाने में सक्षम होना चाहिए। हालांकि "देरी" संभवतः "रोका जा सकता है" से अधिक सटीक है।
Comments
Post a Comment