connect
समारोह एक boost::function
वस्तु है, जो मूल रूप से कुछ भी एक operator()
इसके लिए परिभाषित किया है कि चारों ओर एक सामान्य आवरण है लेता है। इसलिए यह बिल्कुल सुरक्षित है जितना आप बाध्यकारी हैं।
उदाहरण के लिए, इस यथोचित सुरक्षित है:
boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
यह यथोचित सुरक्षित है, क्योंकि यह अपने डेटा के हिस्से के रूप में एक boost::shared_ptr
संग्रहीत करता है।
ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
यह सशर्त सुरक्षित है। यदि यह कनेक्शन अभी भी मौजूद है और यह delete pValue
निष्पादित करता है तो यह तुरंत असुरक्षित हो जाता है।
व्यक्तिगत रूप से, मैं "सशर्त रूप से सुरक्षित" में अधिक विश्वास नहीं डालता, लेकिन यह आपके ऊपर है। मुद्दा यह है कि boost::bind
पर जो कुछ भी आप बाध्य करते हैं, वह तब तक अस्तित्व में रहना चाहिए जब तक यह बाध्य न हो।
स्रोत
2011-10-10 07:50:37