3

最初に:それはboost::noncopyableまたはbooster::noncopyableですか。私は両方を別の場所で見ました。

クラスをコピー不可にしたいのはなぜですか?サンプルのユースケースをいくつか挙げていただけますか?

4

2 に答える 2

5

そのクラスが所有する(つまり、破棄する責任がある)メンバー変数としてポインターを持つクラスがある場合はいつでも便利です。または他の参照カウントスマートポインターを使用していない限りshared_ptr<>、クラスを安全にコピーまたは割り当てることはできません。これは、デストラクタdeleteでポインターが必要になるためです。ただし、クラスのコピーが取得されたかどうかはわからないため、解放されたポインターの逆参照により、二重削除またはアクセス違反が発生します。

それから継承する場合、noncopyable2つの利点があります。

  • クラスがコピーまたは割り当てられるのを防ぎます
  • これにより、クラス定義、つまり自己文書化コードを見ることで意図が明確になります。

例えば

class MyClass : boost::noncopyable
{ 
   ...
};
于 2010-08-20T13:39:36.547 に答える
3

の場合の正しいものboostはですboost::noncopyable

名前が示すように、オブジェクトのコピーを防ぐために使用されます。コピーが非常に扱いにくい状況につながる場合は理にかなっています。例として、ドキュメントに記載されているようなファイルハンドルまたはネットワーク接続の概念をラップするクラスがあります。リソースまたはファイルを解放/閉じるときに問題が発生します。それらのコピーがたくさんある場合、どのように処理しますか。参照カウントを使用することもできますが、一部の場所でハンドルをアンラップすると、正しく処理するのが困難になります...

個人的には、シングルトンパターンを実装する際に最も明確で便利な使用法を見つけました。この場合、インスタンスを1つだけにしたいので、この場合は明らかにコピー可能にしたくありません。シングルトンは、システム構成などのグローバルリソースを保持するためにクラスのインスタンスを1つだけ作成できることを保証します。

于 2010-08-19T05:16:32.953 に答える