में धक्का देते समय std :: unique_ptr का सही उपयोग क्या है, मैं अपनी कक्षा में ऑब्जेक्ट्स के पॉइंटर्स का वेक्टर रखना चाहता हूं। इसके लिए एक विनाशक बनाने से बचने के लिए मैं std::unique_ptr
का उपयोग करना चाहता था, क्योंकि वस्तुओं को मेरी कक्षा में बनाया/स्वामित्व/नष्ट कर दिया गया है, लेकिन मेरे पास एक कंपाइलर त्रुटि है जिसे मैं समझ नहीं पा रहा हूं।std :: vector
std::unique_ptr<int> createPtr(int value)
{
std::unique_ptr<int> ptr(new int(value));
return ptr;
};
int main()
{
std::vector<std::unique_ptr<int>> vec;
vec.push_back(createPtr(1));
std::unique_ptr<int> ptr = createPtr(2);
vec.push_back(ptr);//error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}
क्या आप मुझे बता सकते हैं क्यों मैं इस त्रुटि मिलती है और std::unique_ptr
के लिए सही उपयोग क्या है: अगली कोड मेरी समस्या के लिए एक छोटा नमूना रूप में काम करेगा?
वेक्टर में मूल्यों के बजाय पॉइंटर्स को 'int' में संग्रहीत करने का क्या मतलब है? –
यदि आप 'std :: unique_ptr <>' पर विचार कर रहे हैं, तो संभवतः आप * ऑब्जेक्ट्स का वेक्टर नहीं रखते हैं, लेकिन "ऑब्जेक्ट्स के पॉइंटर्स का वेक्टर"। यदि आपके पास "ऑब्जेक्ट्स का वेक्टर" था, तो विनाश स्वचालित रूप से ठीक से होगा। –
@TadeuszKopec कृपया प्रश्न पढ़ें – Felics