ले जाएं मैं कन्स्ट्रक्टर और असाइनमेंट ओप को सी ++ 11 में काम करने के तरीके को समझने की कोशिश कर रहा हूं लेकिन मुझे मूल कक्षाओं में प्रतिनिधि के साथ समस्याएं आ रही हैं।कन्स्ट्रक्टर और विरासत
कोड:
class T0
{
public:
T0() { puts("ctor 0"); }
~T0() { puts("dtor 0"); }
T0(T0 const&) { puts("copy 0"); }
T0(T0&&) { puts("move 0"); }
T0& operator=(T0 const&) { puts("assign 0"); return *this; }
T0& operator=(T0&&) { puts("move assign 0"); return *this; }
};
class T : public T0
{
public:
T(): T0() { puts("ctor"); }
~T() { puts("dtor"); }
T(T const& o): T0(o) { puts("copy"); }
T(T&& o): T0(o) { puts("move"); }
T& operator=(T const& o) { puts("assign"); return static_cast<T&>(T0::operator=(o)); }
T& operator=(T&& o) { puts("move assign"); return static_cast<T&>(T0::operator=(o)); }
};
int main()
{
T t = std::move(T());
return 0;
}
हालांकि, जब मैं संकलन और VS2012 के तहत चलाने के लिए, उत्पादन इंगित करता है कि T0 सदस्यों की lvalue संस्करणों कहा जाता है:
ctor 0
ctor
copy 0 <--
move <--
dtor
dtor 0
dtor
dtor 0
एक ऐसी ही स्थिति (साथ थोड़ा अलग परीक्षण केस) चाल असाइनमेंट के साथ होता है - टी के चाल असाइनमेंट ऑपरेटर टी 0 के "सामान्य" असाइनमेंट ऑपरेटर को कॉल करता है।
मैं क्या गलत कर रहा हूं?