के साथ सेमेन्टिक्स को ले जाएं मैं विजुअल स्टूडियो 2012 अपडेट 2 का उपयोग कर रहा हूं और मुझे यह समझने में परेशानी हो रही है कि क्यों std :: vector unique_ptr की कॉपी कन्स्ट्रक्टर का उपयोग करने का प्रयास कर रहा है। मैंने इसी तरह के मुद्दों पर ध्यान दिया है और अधिकांश स्पष्ट चालक कन्स्ट्रक्टर और/या ऑपरेटर नहीं होने से संबंधित हैं।unique_ptr
यदि मैं सदस्य चर को एक स्ट्रिंग में बदलता हूं, तो मैं सत्यापित कर सकता हूं कि चालक कन्स्ट्रक्टर कहलाता है; हालांकि, संकलन त्रुटि में unique_ptr परिणामों का उपयोग करने का प्रयास कर रहा है:
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
।
मुझे उम्मीद है कि कोई मुझे जो याद कर रहा है उसे इंगित कर सकता है, धन्यवाद!
#include <vector>
#include <string>
#include <memory>
class MyObject
{
public:
MyObject() : ptr(std::unique_ptr<int>(new int))
{
}
MyObject(MyObject&& other) : ptr(std::move(other.ptr))
{
}
MyObject& operator=(MyObject&& other)
{
ptr = std::move(other.ptr);
return *this;
}
private:
std::unique_ptr<int> ptr;
};
int main(int argc, char* argv[])
{
std::vector<MyObject> s;
for (int i = 0; i < 5; ++i)
{
MyObject o;
s.push_back(o);
}
return 0;
}
आप सदिश में सीधे अपने वस्तुओं के निर्माण के लिए चाहते हैं, आप भी सिर्फ 'उन्हें emplace' कर सकते हैं:' के लिए (int i = 0; i <5; ++ i) s.emplace_back(); 'उसे वीसी 11 के साथ भी काम करना चाहिए। –