std::auto_ptr
में auto_ptr को प्रतिस्थापित करना वीसी ++ 8 में टूट गया है (जो हम काम पर उपयोग करते हैं)। इसके साथ मेरा मुख्य पकड़ यह है कि यह auto_ptr<T> x = new T();
की अनुमति देता है, जो निश्चित रूप से गलती से करने के लिए सरल होने पर, भयानक दुर्घटनाओं की ओर जाता है।वीसी ++ 8
:
नोट दृश्य स्टूडियो 2005 में std :: auto_ptr के कार्यान्वयन बुरी तरह टूट गया है कि। http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98871 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101842
मैं
boost::scoped_ptr
, उपयोग करने के लिए संकेत है कि स्वामित्व पारित नहीं करना चाहिए के लिए चाहते हैं।boost::shared_ptr
, कंटेनरों और अन्य जगहों पर पॉइंटर्स के लिए जहां उनकी आवश्यकता होती है।std::auto_ptr
, पॉइंटर्स के लिए जो स्वामित्व पास/पास कर सकते हैं।
लेकिन std::auto_ptr
के बाद से मेरे लिए टूटी हुई है, मुझे आश्चर्य है कि क्या सबसे अच्छा तरीका होगा:
- नेट से कुछ के साथ
std::auto_ptr
बदलें। रानी शारोनी से इस this की तरह (अभी तक यह कोशिश नहीं की है)। - इसके बजाय
boost::shared_ptr
का उपयोग करें। निश्चित रूप से काम करेगा, हालांकि कुछ मामूली उपरांत होगा जो मुझे परवाह नहीं है। लेकिन मैं सूचक के इरादे को इंगित करने के लिएauto_ptr
का उपयोग करना चाहता हूं। (इस दृष्टिकोण पर वोट के लिए this उत्तर देखें।) - मुझे अभ्यास में स्वामित्व पास करने की आवश्यकता नहीं होगी, इसलिए मुझे इसके बारे में चिंता नहीं करनी चाहिए।
अद्यतन: यहाँ मैं क्या किया है: मैं रानी Sharoni से ऊपर उल्लिखित auto_ptr कार्यान्वयन की नकल की। From here।
class T
{
public:
T() {
OutputDebugStringA("T\n");
};
~T() {
OutputDebugStringA("~T\n");
};
};
{
fix::auto_ptr<T> x(new T); // This just works.
}
{
fix::auto_ptr<T> x = (new T); // Doesn't compile. Great!
}
{
fix::auto_ptr<T> x = fix::auto_ptr<T>(new T); // Transfer of ownership works also.
}
बेशक
संपूर्ण नहीं हैं और आप उन पर भरोसा नहीं करना चाहिए द्वारा इन परीक्षणों हैं:
कुछ मामूली परीक्षण किया। अपवाद सुरक्षित टेम्पलेटेड वर्ग को कार्यान्वित करना बालों का व्यवसाय है। कम से कम यह एक में निर्मित से बेहतर काम करता है।
नोट: मुझे नहीं पता कि मुझे कॉपीराइट के संबंध में अभी तक इस कार्यान्वयन का उपयोग करने की अनुमति है या नहीं। मैंने रानी को ईमेल किया है और मैं एक उत्तर का इंतजार कर रहा हूं। जब मैं और जानूं तो मैं इस पोस्ट को अपडेट करूंगा।
हर किसी के लिए रानी शारोनी के auto_ptr कार्यान्वयन का उपयोग करने के लिए अनुमति दी जाती है जैसा आप चाहें।
आपके सभी उत्तरों के लिए धन्यवाद।
पासिंग स्वामित्व कुछ ऐसा नहीं होता जो अक्सर होता है, लेकिन यह कोड के हिस्से के रूप में स्वयं दस्तावेज़ों का एक साफ तरीका प्रदान करता है। –
यह बिल्कुल मेरा विचार है। मैं स्वयं दस्तावेज कोड की पूजा करता हूं। –