多くのメンバ変数を持つクラスに対して退屈な移動コンストラクタを書くことがよくあります。デフォルトの移動コンストラクタへの委任
A(A && rhs) :
a(std::move(rhs.a)),
b(std::move(rhs.b)),
c(std::move(rhs.c)),
d(std::move(rhs.d)) {
some_extra_work();
}
彼らはいくつかの平凡な余分な作業をpeform、その後、デフォルトの移動のコンストラクタに関連付けられたすべてのアクションを実行し、次のとおりです。彼らは、次のようなものを見て。理想的には、デフォルトのムーブコンストラクタに委譲して余分な作業を実行しますが、自分自身のムーブコンストラクタを定義するとデフォルトの実装が定義されなくなり、デリゲートすることはありません。
このアンチパターンを回避する良い方法はありますか?
困難を実装するために使用私のtidy_ptrタイプ、? 1つはすべてのデフォルトのコンストラクタを持ち、もう1つは 'some_extra_work'を行います。 *ゼロのルール*をチェックしてください。 – zch
これが当てはまるかどうかは分かりませんが、 'A(A && rhs、int):A(rhs){}'はうまくいかないでしょうか? – Damon
デフォルトの移動コンストラクタを持つ中間基本クラスが役に立ちます。 –