सप्ताहांत को कम करना मैं अपने सी ++ कौशल को रीफ्रेश करने और कुछ सी ++ 11 सीखने की कोशिश कर रहा हूं, मैंने निम्न समस्या पर ठोकर खाई है: मैं अपने कंटेनर वर्ग को ठीक से मजबूर नहीं कर सकता उपयोग चाल निर्माता: इस प्रकारसंरक्षक को std :: vector पास करना और semantics को स्थानांतरित करना
class builder
{
...
container build() const
{
std::vector<items> items;
//... fill up the vector
return container(items); //should move the vector right? wrong!
//return container(std::move(items)); also doesn't work
}
}
और कक्षाओं आइटम और कंटेनर में परिभाषित किया गया,:
class container
{
public:
container(std:vector<item> items)
: items_(items) // always invokes copy constructor on vector, never move
{ }
container(container&& rhs)
{
...
}
...
private:
std::vector<item> items_;
}
class item
{
public:
//move .ctor
item(item && rhs);
item& operator=(item && rhs);
//copy .ctor
item(const item& rhs); //this gets called instead of move .ctor
item& operator=(const item& rhs);
...
}
अब मेरी कोड रों
मैं एक बिल्डर वर्ग है, जो परिभाषित किया गया है इस प्रकार है
builder my_builder;
...
auto result = my_builder.build();
जो हर आइटम पहले निर्माण किया जा करने के लिए और उसके बाद की प्रतिलिपि बनाई का कारण बनता है का उपयोग करता है ... मतलब
मैं क्लासेस आइटम की प्रतिलिपि नहीं कैसे निम्नलिखित लिखना चाहिए? क्या मुझे मानक पॉइंटर्स का उपयोग करने के लिए वापस जाना चाहिए?
'item2' क्या है? – Mankarse
@Mankarse यह एक टाइपो था, – ghord