मेरे पास एक प्रकार है जिसे मैंने कॉपी कन्स्ट्रक्टर से हटा दिया है, और मैं इस प्रकार के vector
रखना चाहता हूं, इसलिए मुझे emplace_back
के माध्यम से सभी तत्वों को बनाने की आवश्यकता है। लेकिन, emplace_back
को एक कॉपी कन्स्ट्रक्टर की आवश्यकता होती है, क्योंकि संकलक emplace_back
को तत्काल करने में सक्षम नहीं होने के बारे में चेतावनी देता है क्योंकि कॉपी कन्स्ट्रक्टर हटा दिया गया है। इसे एक प्रतिलिपि बनाने की आवश्यकता क्यों है? मैंने सोचा कि emplace_back
का पूरा बिंदु कुछ भी कॉपी किए बिना vector
बनाना था। क्या मेरे पास ऑब्जेक्ट्स का vector
भी हो सकता है जिसमें कॉपी कॉपीर नहीं है?हटाए गए प्रतिलिपि निर्माता के साथ emplace_back का यह उपयोग क्यों नहीं करता है?
class MyType {
public:
MyType(std::array<double, 6> a) {}
MyType(const MyType& that) = delete;
};
int main() {
std::vector<MyType> v;
std::array<double, 6> a = {1,2,3,4,5,6};
v.emplace_back(a);
}
कंपाइलर clang/llvm है।
http://cpp.sh/9v5w यहां काम नहीं करता –
यहां भी http://goo.gl/eLUPjR –
'emplace_back' को कॉपी कन्स्ट्रक्टर की आवश्यकता नहीं है, लेकिन जब वेक्टर की क्षमता स्टोर करने के लिए पर्याप्त नहीं है नया तत्व, वेक्टर को इसके तत्व को पुन: आवंटित करने की आवश्यकता है, इसके लिए प्रतिलिपि/चालक कन्स्ट्रक्टर की आवश्यकता होती है। कॉपी कन्स्ट्रक्टर को हटाकर, आप इसे डिफ़ॉल्ट चाल कन्स्ट्रक्टर उत्पन्न करने से भी रोकते हैं। इस मामले में, एक चालक कन्स्ट्रक्टर घोषित कर सकता है – Danh