#include <iostream>
class Class
{
public:
Class() { std::cerr << "ctor" << std::endl; }
~Class() { std::cerr <<"dtor" << std::endl; }
Class(Class&) { std::cerr << "copy ctor" << std::endl; }
Class & operator=(const Class &)
{
std::cerr << "copy operator=" << std::endl;
return *this;
}
Class(Class&&) { std::cerr << "move ctor" << std::endl;}
Class & operator=(Class &&)
{
std::cerr << "move operator="<< std::endl;
return *this;
}
};
int main(int, char**)
{
Class object;
Class && rvr = Class();
object = rvr; // (*)
}
出力は
ctor
ctor
copy operator=
dtor
dtor
1) 行 (*) で「copy ctor」が呼び出されるのはなぜですか?
2)毎回 std::move() を使用する必要がある場合、「移動セマンティクス」とデータを移動するメソッドの違いは何object.destructive_move();
ですか?
3) 正確に move ctor/operator が呼び出されるのはいつですか?
ありがとう!