ムーブコンストラクタ

引数に右辺値参照を取るコンストラクタ「ムーブコンストラクタ」を定義できる。

右辺値参照・ムーブセマンティクス - 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になっている。

Sample/cpp/move_constructor/move_constructor/src/move_constructor at master · bg1bgst333/Sample · GitHub