मैं नीचे छोटे उदाहरण जैसे चेनिंग-प्रकार का एक वर्ग बना रहा हूं। ऐसा लगता है कि जब सदस्य काम करते हैं, तो कॉपी कंस्ट्रक्टर को आमंत्रित किया जाता है। क्या कॉपी कंस्ट्रक्टर कॉल से छुटकारा पाने का एक तरीका है? नीचे मेरे खिलौने के उदाहरण में, यह स्पष्ट है कि मैं केवल अस्थायी लोगों के साथ काम कर रहा हूं और इस तरह "" होना चाहिए (शायद मानकों द्वारा नहीं, लेकिन तार्किक रूप से) एक चीरा हो। दूसरी सबसे अच्छी पसंद, एलिसन को कॉपी करने के लिए, कॉल कंस्ट्रक्टर को कॉल करने के लिए होगा, लेकिन ऐसा नहीं है।
class test_class {
private:
int i = 5;
public:
test_class(int i) : i(i) {}
test_class(const test_class& t) {
i = t.i;
std::cout << "Copy constructor"<< std::endl;
}
test_class(test_class&& t) {
i = t.i;
std::cout << "Move constructor"<< std::endl;
}
auto& increment(){
i++;
return *this;
}
};
int main()
{
//test_class a{7};
//does not call copy constructor
auto b = test_class{7};
//calls copy constructor
auto b2 = test_class{7}.increment();
return 0;
}
संपादित करें: कुछ स्पष्टीकरण। 1. यह अनुकूलन स्तर पर निर्भर नहीं करता है। 2. मेरे वास्तविक कोड में, मेरे पास अधिक जटिल (जैसे ढेर आवंटित) वस्तुएं हैं
auto b = test_class{7};
कॉपी कंस्ट्रक्टर को कॉल नहीं करता है क्योंकि यह वास्तव में बराबर है test_class b{7};
और कंपाइलर इस मामले को पहचानने के लिए पर्याप्त स्मार्ट हैं और इसलिए आसानी से किसी भी नकल को खत्म कर सकते हैं। उसी के लिए नहीं किया जा सकता है b2
।
std::cout
) आपकी कॉपी ctor में है? इसके बिना प्रतिलिपि को दूर अनुकूलित किया जाना चाहिए।