引数に右辺値参照を取るコンストラクタ「ムーブコンストラクタ」を定義できる。
右辺値参照・ムーブセマンティクス - cpprefjp C++日本語リファレンス
profile.hに、
こんな感じでムーブコンストラクタを宣言。
profile.cppは、
引数のobjのメンバのポインタに挿げ替え。
main.cppでは、
std::move経由で右辺値として渡す。
$ vi main.cpp $ g++ -o main main.cpp profile.cpp --std=c++11 $ ./main constructor set_profile get_name obj1.get_name() = Taro get_age obj1.get_age() = 20 get_address obj1.get_address() = Tokyo copy_constructor get_name obj2.get_name() = Taro get_age obj2.get_age() = 20 get_address obj2.get_address() = Tokyo move_constructor get_name obj3.get_name() = Taro get_age obj3.get_age() = 20 get_address obj3.get_address() = Tokyo before delete [] name_ = 0x2506070 before age_ = 20 before delete [] address_ = 0x2506090 destructor name_ = nullptr age_ = 0 address_ = nullptr destructor before delete [] name_ = 0x2506030 before age_ = 20 before delete [] address_ = 0x2506050 destructor $
obj2はすでにnullptrになっている。