मैं कुछ कोड सी ++ 11-आईएन हूं। मेरे पास हैअन्यथा स्वामित्व और कच्चे सूचक के लिए unique_ptr का उपयोग करें?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
वस्तुओं के लिए मेरी कक्षा एक बिंदु अंदर "va_x" के एक्स * रों वह भी मेरी कक्षा बी के अंदर "vb_x" के एक्स * द्वारा की ओर इशारा कर रहे हैं
अब मैं करूंगा स्मार्ट पॉइंटर्स का उपयोग करना पसंद है। मेरे लिए, यह स्पष्ट लगता है कि वर्ग बी वस्तुओं एक्स * द्वारा बताया का स्वामित्व है (विशेष रूप से, क्योंकि मेरी एक उदाहरणों बी के हैं)
तो मैं बी अंदर एक्स के लिए एक unique_ptr उपयोग करना चाहिए:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
मेरा सवाल है, कक्षा ए के लिए मुझे क्या करना चाहिए? क्या मुझे कच्चे पॉइंटर्स रखना चाहिए? मेरी इकाई परीक्षण में ऐसा करते समय, से, मैं स्वीकार करना होगा कि यह अजीब बातें (IMO) की ओर जाता है, उदाहरण के लिए (कैप्सूलीकरण के बारे में चिंता मत करो, उस बिंदु नहीं है):
unique_ptr<X> x(new X());
A a;
a.va_x.push_back(&(*x)); //awkward, but what else can I do?
A.vb_a.push_back(a); //ok
B.vb_x.push_back(move(x)); //ok
सी ++ 11 के बारे में भविष्य के प्रश्नों के लिए, कृपया उन्हें सी ++ के साथ टैग करें। :) – Xeo
क्या आपने पहले एक समान रूप से समान प्रश्न नहीं पूछा था? – Puppy
@DeadMG वैसे पिछला एक अद्वितीय_ptr के बारे में भी है, लेकिन यह वही बात नहीं है जो मुझे लगता है कि –