मैं कोडविनाशकारी वस्तु पर निर्माता को ले जाएं?
#include <iostream>
class A {
public:
A() {
std::cout << "Default constructor" << std::endl;
}
A(const A & other)
{
std::cout << "Copy constructor" << std::endl;
}
A(A && other)
{
std::cout << "Move constructor" << std::endl;
}
~A()
{
std::cout << "Destructor" << std::endl;
}
private:
int i;
};
A && f()
{
return A();
}
int main() {
A a = f();
}
मैं इसे चलाने की कोशिश की का एक टुकड़ा है और उत्पादन पता चला है
Default constructor
Destructor
Move constructor
Destructor
मेरा प्रश्न क्यों है नाशक ले जाया निर्माता से पहले कहा जाता है होना करने के लिए? क्या इसका यह भी अर्थ है कि दूसरी वस्तु को नष्ट मूल्य के साथ बनाया गया था?
आपको अस्थायी चर के संदर्भ (rvalue-) संदर्भ नहीं लौटना चाहिए। – Jarod42
@ फ्रैंकोइस एंड्रीक्स यह उत्तर – Slava
होना चाहिए जीसीसी और वीसी दोनों को डिफ़ॉल्ट रूप से इसके लिए एक कंपाइलर चेतावनी देना चाहिए। किसी भी मामले में, यदि आप उचित चेतावनी स्तर निर्धारित करते हैं तो * * आपको * चेतावनी दे सकता है। –