ここでは、特別なメンバー関数を明示的に宣言することについて議論しています。そうするのは悪い習慣ですか?つまり、コンパイラが生成したバージョンはメンバーごとの操作を実行します。まったく同じことを行うメソッドを実装する場合 ( three/five のルールを考慮してください)、それはより多くの作業であることに加えて、これは悪い習慣ですか?
もちろん、それは冗長であり、コード ベースを肥大化させると言えます。明示的な宣言を行うとデバッグが簡単になると主張する人もいます (たとえば、オブジェクトがコピーされるたびにブレークポイントを設定できるため)。
では、(以下のWiki ページExplicit
に基づく例)のようなクラスを書くのは悪い習慣ですか、それとも単なる個人的な好みですか?
class Explicit {
string msg;
public:
Explicit() : msg("") {}
Explicit(const Explicit& other) : msg(other.msg) {}
Explicit& operator=(const Explicit& other) {
if (this != &other) { msg = other.msg; }
return *this;
}
~Explicit() {}
};