クラスが常に内部変数を初期化する必要があるため、クラスにデフォルトのコンストラクターがない場合、移動コンストラクターを持つべきではないということになりますか?
class Example final {
public:
explicit Example(const std::string& string) : string_(
string.empty() ? throw std::invalid_argument("string is empty") : string) {}
Example(const Example& other) : string_(other.string_) {}
private:
Example() = delete;
Example(Example&& other) = delete;
Example& operator=(const Example& rhs) = delete;
Example& operator=(Example&& rhs) = delete;
const std::string string_;
};
このクラスは常に、内部文字列が空でない文字列によって設定されることを想定しており、内部文字列はExample
オブジェクト間でコピーされます。Example が移動された場合、std::move
呼び出しを介して文字列を空のままにしておく必要があるため、移動コンストラクターはここでは適用されません。