이동 생성자 및 할당 연산이 C++ 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 회원의 좌변 버전이라고 나타냅니다
ctor 0
ctor
copy 0 <--
move <--
dtor
dtor 0
dtor
dtor 0
유사한 상황을 (함께 약간 다른 테스트 케이스)는 이동 할당에서 발생합니다. T의 이동 할당 연산자는 T0의 "일반"할당 연산자를 호출합니다.
내가 뭘 잘못하고 있니?