最初に:それはboost::noncopyableまたはbooster::noncopyableですか。私は両方を別の場所で見ました。
クラスをコピー不可にしたいのはなぜですか?サンプルのユースケースをいくつか挙げていただけますか?
最初に:それはboost::noncopyableまたはbooster::noncopyableですか。私は両方を別の場所で見ました。
クラスをコピー不可にしたいのはなぜですか?サンプルのユースケースをいくつか挙げていただけますか?
そのクラスが所有する(つまり、破棄する責任がある)メンバー変数としてポインターを持つクラスがある場合はいつでも便利です。または他の参照カウントスマートポインターを使用していない限りshared_ptr<>
、クラスを安全にコピーまたは割り当てることはできません。これは、デストラクタdelete
でポインターが必要になるためです。ただし、クラスのコピーが取得されたかどうかはわからないため、解放されたポインターの逆参照により、二重削除またはアクセス違反が発生します。
それから継承する場合、noncopyable
2つの利点があります。
例えば
class MyClass : boost::noncopyable
{
...
};
の場合の正しいものboost
はですboost::noncopyable
。
名前が示すように、オブジェクトのコピーを防ぐために使用されます。コピーが非常に扱いにくい状況につながる場合は理にかなっています。例として、ドキュメントに記載されているようなファイルハンドルまたはネットワーク接続の概念をラップするクラスがあります。リソースまたはファイルを解放/閉じるときに問題が発生します。それらのコピーがたくさんある場合、どのように処理しますか。参照カウントを使用することもできますが、一部の場所でハンドルをアンラップすると、正しく処理するのが困難になります...
個人的には、シングルトンパターンを実装する際に最も明確で便利な使用法を見つけました。この場合、インスタンスを1つだけにしたいので、この場合は明らかにコピー可能にしたくありません。シングルトンは、システム構成などのグローバルリソースを保持するためにクラスのインスタンスを1つだけ作成できることを保証します。