2011-01-01 12 views
5

सी ++ 0x में नहीं, क्या यह कानूनी/उम्मीद है कि कुछ वर्गों की प्रतिलिपि बनाई जा सकती है लेकिन स्थानांतरित नहीं की जा सकती है? मैं एक विषम वर्ग को लागू करने के लिए देख रहा हूं जो आकार बदलता है, और मुझे यकीन नहीं है कि अगर कुछ वर्गों की प्रतिलिपि की आवश्यकता होती है और कुछ आवश्यक चलती है तो मैं इसे संभाल सकता हूं।कॉपी करें लेकिन

उत्तर

5

हाँ, यह कानूनी है एक वर्ग copyable लेकिन चल नहीं होने के लिए:

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

हालांकि, मैं क्यों किसी को भी ऐसा करने के लिए चाहते हो जाएगा के रूप में एक अच्छा कारण के बारे में सोच नहीं कर सकते। सी ++ कोडर (जैसे मेरे!) को जानना, मुझे लगता है कि आपको उम्मीद करनी चाहिए कि यह आ सकता है।

जिज्ञासा से, आप उस पर किस कोड पर भरोसा कर रहे हैं यदि कोई वर्ग कॉपी करने योग्य नहीं है लेकिन चलने योग्य नहीं है?

+0

यह एक विषम ढेर है जो आकार बदलता है। मुझे लगता है कि अगर मैं न्यूनतम प्रयास के साथ सी ++ 03 संगतता चाहता हूं, तो मुझे दोनों के लिए अनुमति देनी चाहिए। – Puppy

+1

हम्म ... कॉपी करने योग्य, अबाध (मुझे लगता है कि यह इसके लिए एक उचित शब्द है?) ऑब्जेक्ट्स के साथ टूटने वाले कोड में विशेष रूप से क्या है? मैं उत्सुक हूं क्योंकि मैं इससे पहले कभी नहीं आया हूं। – templatetypedef

+0

यह एक अच्छी बात है जिसे आपने कहा था। किसी कारण से, मुझे यह ध्यान में था कि जिन वस्तुओं को स्थानांतरित किया गया था उन्हें विनाश की आवश्यकता नहीं थी। ओह। – Puppy

0

मुझे पूरा यकीन है कि चालक संरक्षक/निजी बनाना उस वर्ग की वस्तुओं को स्थानांतरित करने की क्षमता को सीमित करने का एक तरीका है। यदि आप एक टेम्पलेट में उम्मीद कर सकते हैं? मुझे ऐसा नहीं लगता। आपको उस तरह की चेक के लिए std::enable_if की आवश्यकता होगी।

संबंधित मुद्दे