私は、実行時にインスタンスのコピーが似ていてはならないという要件のクラスをいくつか持っています。クラスの一つのように見えるとしましょう - どの2つのインスタンスが一度に同じプリンタを制御することはできませんので、コピーコンストラクタ/割り当てブレークの標準ライブラリ操作を削除する
class A{
int id;
int printerNum;
bool failState = true;
//....
public:
//....
};
今id
とprinterNum
は、各インスタンスに固有でなければなりません。 id
はオブジェクトの作成時にのみ生成されますが、printerNum
は変更できます。この2つの要件については、コンストラクタとオブジェクトを正しく初期化することがない変数failState
のチェックを行い、何か問題が発生した場合はfailState
をtrueに設定します。
また、コピーコンストラクタと代入演算子を削除して、ユーザーがコピーを作成せず、idとprinterNumが一意になるようにコンストラクタから初期化できることを確認しました。
しかし、この変更を行う前に、標準の名前空間内で他のアルゴリズムやコンテナを利用できないかと尋ねることを考えていましたか?彼らは多くの場合、代入演算子とコピーコンストラクタを使用している可能性があり、私は次のように明示的にこれらを削除した場合、何が起こるか - ことができない場合は
// no copy
A(const A&) = delete;
// no assign
A& operator=(const A&) = delete;
、または、私はすべての提案を歓迎するこれを行うための別の方法があります。ありがとうございます:)
もしそうなら、それはコンパイルされません。 – Tobias
あなたはまだあなたのクラスのプライベートとしてコピーコンストラクタ&代入演算子を定義することができます。 –
@ Jean-FrançoisFabreどのような利点がありますか?それはまだアクセスできないでしょう、そうですか? –