戻り値の最適化 (RVO と NRVO の両方) に関する今日のコンパイラの高品質を考慮すると、ムーブ コンストラクターとムーブ代入演算子の追加を開始することが実際にどのようなクラスの複雑さに意味があるのか疑問に思っていました。
たとえば、このreally_trivial
クラスの場合、ムーブ セマンティクスは、RVO および NRVO がそのインスタンスをコピーするときに既に提供しているもの以上のものを提供できないと想定しています。
class really_trivial
{
int first_;
int second_;
public:
really_trivial();
...
};
このsemi_complex
クラスでは、ためらうことなくムーブ コンストラクターとムーブ代入演算子を追加します。
class semi_complex
{
std::vector<std::string> strings_;
public:
semi_complex(semi_complex&& other);
semi_complex& operator=(semi_complex&& other);
...
};
では、移動コンストラクターと移動代入演算子を追加することは、どのくらいの量で、どのような種類のメンバー変数で意味をなすのでしょうか?