私のクラスのデータ構造へのアクセスを保護する必要があります。私はmutexを持つことができないので(私はそれをコピーできないので)、私はshared_ptrを持って、mutexをそこに保つことを考えています。ここに私の考えのサンプルコードは次のとおりです。boost :: shared_ptr boost :: mutexとコピーコンストラクタ
class Sample {
typedef boost::lock_guard<boost::mutex> AcquireLock;
boost::shared_ptr<boost::mutex> mutt;
public:
Sample() : mutt(new boost::mutex) {}
void Method()
{
AcquireLock lock(*mutt);
//do some work here
}
};
私は、次の質問を持っている:
- shared_ptrのを経由して、クラスのメンバとして(ミューテックスをそのように使うのは悪い習慣です)?
- shared_ptr経由でヒープにメモリが割り当てられているため、このクラスのコピーコンストラクタを用意する必要がありますか?
編集:たぶん私は、もう少し詳細を与える必要があります。 私は一度だけ、このオブジェクトを作成するとstd ::ベクトルに保存します。私はそれをコピーする必要はなく、ベクトルがコピーを作成する必要がある場合、コピーごとに異なるミューテックスを持つことは望ましくありません。だから私はコピーコンストラクタが私のために働くと思うのです。
私はオブジェクトをstd :: vectorに保存してそこから使用するのでコピーがあります。それ以外にはコピーを作成しないので、デフォルトのコピーコンストラクタが私のために働くと思います。私が迷っているのは、浅いコピーが参照カウントなどを混乱させ、将来問題を引き起こす場合です。 –
ベクトルのSampleオブジェクトにshared_ptrを格納しないと、コピーされるSampleオブジェクトについて心配する必要はありません –