के साथ कन्स्ट्रक्टर कॉपी करें मेरे पास क्लास सदस्य के रूप में एक std::unique_ptr
वाला क्लास है। मैं सोच रहा था, कॉपी कन्स्ट्रक्टर को सही तरीके से परिभाषित करने के लिए, क्योंकि मुझे निम्न कंपाइलर त्रुटि संदेश मिल रहा है: error C2248: std::unique_ptr<_Ty>::unique_ptr : cannot access private member declared in class 'std::unique_ptr<_Ty>
। मेरी कक्षा डिजाइन लग रहा है कि:स्मार्ट पॉइंटर
template <typename T>
class Foo{
public:
Foo(){};
Foo(Bar<T> *, int);
Foo(const Foo<T> &);
~Foo(){};
void swap(Foo<T> &);
Foo<T> operator = (Foo<T>);
private:
std::unique_ptr<Bar> m_ptrBar;
int m_Param1;
};
template < typename T >
Foo<T>::Foo(const Foo<T> & refFoo)
:m_ptrBar(refFoo.m_ptrBar),
m_Param1(refFoo.m_Param1)
{
// error here!
}
template < typename T >
void Foo<T>::swap(Foo<T> & refFoo){
using std::swap;
swap(m_ptrBar, refFoo.m_ptrBar);
swap(m_Param1, refFoo.m_Param1);
}
template < typename T >
Foo<T> Foo<T>::operator = (Foo<T> Elem){
Elem.swap(*this);
return (*this);
}
@ कब्बी, धन्यवाद। अब मुझे एक और समस्या है। 'बार' वर्ग वास्तव में एक सार आधार वर्ग है, और इसलिए मुझे एक नया त्रुटि संदेश मिल रहा है: 'त्रुटि C2259:' बार ': अमूर्त वर्ग को तत्काल नहीं कर सकता है, क्या कोई समाधान है, सार सारणी वर्ग को बदलने के अलावा, एक साधारण आधार वर्ग? – Tin
@ टिन: उस स्थिति में, आपको बेस क्लास में शुद्ध आभासी 'क्लोन() 'फ़ंक्शन जोड़ने की आवश्यकता होगी, प्रत्येक व्युत्पन्न कक्षा में ओवरराइड किया जाएगा ताकि' नया 'का उपयोग करके प्रतिलिपि बनाई जा सके। फिर प्रारंभकर्ता 'बार (foo.bar? Foo.bar-> क्लोन(): nullptr) बन जाता है। –
@ टिन द सी ++ एफएक्यू ने कहा कि ["आभासी कन्स्ट्रक्टर"] (http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.8) – Cubbi