unique_ptr
का एक कंटेनर थोड़ा समझ में आता है: आप इसे प्रारंभकर्ता सूचियों के साथ उपयोग नहीं कर सकते हैं और मैं कंटेनर (नीचे कामकाज) के माध्यम से पुन: प्रयास करने में विफल रहा। क्या मैं कुछ गलत समझ रहा हूँ? या unique_ptr
और एसटीएल कंटेनर का उपयोग करने के लिए यह कब समझ में आता है?एसटीएल कंटेनर के साथ unique_ptr का उपयोग करने के लिए यह समझ में आता है? (सी ++ 11)
How to initialize a container of noncopyable with initializer list?
when I need containers of NoCopy types I usually use
boost::ptr_vector
orstd::vector<shared_ptr>
:
#include <memory>
#include <vector>
using namespace std;
struct Base { void go() { } virtual ~Base() { } };
// virtual ~Base() = default; gives
// "declared virtual cannot be defaulted in the class body" why?
class Derived : public Base { };
int main() {
//vector<unique_ptr<Base>> v1 = { new Derived, new Derived, new Derived };
//vector<shared_ptr<Base>> v2 = { new Derived, new Derived, new Derived };
vector<Base*> v3 = { new Derived, new Derived, new Derived };
vector<shared_ptr<Base>> v4(v3.begin(), v3.end());
vector<unique_ptr<Base>> v5(v3.begin(), v3.end());
for (auto i : v5) { // works with v4
i->go();
}
return 0;
}
निम्न सवालों मुझे इन समाधानों खोजने में मदद की
'वेक्टर> v1 = {make_unique (), make_unique (), make_unique ()};' <- आपको लगता है कि परीक्षण किया? –
जैसा कि @ बेंजामिन बताता है, प्रारंभकर्ता सूचियां परिभाषाओं द्वारा प्रतियां बनाते हैं, इसलिए इन्हें केवल चाल-वस्तुओं के साथ उपयोग नहीं किया जा सकता है। – ildjarn
@ बेंजामिन: स्वीकार्य रूप से, नहीं, क्योंकि मेरे पास वर्तमान में कोई कंपाइलर उपलब्ध नहीं है जो प्रारंभिक सूचियों का समर्थन करता है।मुझे नहीं पता कि समस्या क्या हो सकती है? – Xeo