2016-04-19 16 views
1

共有データセマンティクスを実装するクラスが必要です。おそらく、std::shared_ptrを開始するのがよいでしょう。私はそのようなクラスの典型的な実装は、共有データにプライベートshared_ptrを使用し、少なくともコピーコンストラクタとoperator=を実装できると思います。私は誰もが上記の実装に提供するためにいくつかの批判があればお願いしたいと思いstd :: shared_ptrを使用した共有データクラス

class SharedDataClass { 

public: 
    SharedDataClass(const SharedDataClass& other) 
    { 
    data_ = other.data_; 
    }; 

    SharedDataClass& operator=(const SharedDataClass& other) 
    { 
    data_ = other.data_; 
    return *this; 
    } 

private: 
    std::shared_ptr<DataType> data_; 
}; 

:よう

何か。一貫性のために実装すべき他のメンバー/演算子はありますか?

+4

'=デフォルト;'は十分だと思われます – Jarod42

+1

'std :: shared_ptr data'がこれをすべて処理します。 –

+0

また、移動コンストラクタ/割り当てもあります。 – Jarod42

答えて

5

この場合、コピーコンストラクタまたは代入演算子を実装する必要はありません。コンパイラがあなたのために簡単なデフォルトのものを定義するようにするには、shared_ptrはあなたが期待している仕事をします。

+0

それは良い点です、ありがとう。しかし、これは私が既に持っているものをより少ない労力で得る方法です。 –

1

1つの小さな落とし穴があります。通常は、NULLのdata_ポインタを作成するので、デフォルトのコンストラクタをデフォルトにするべきではありません。私は、デフォルトで構築されたDataTypeオブジェクトを保持するdata_ポインタを作成するデフォルトのコンストラクタを持つ方が一般的には望ましいと思います。

関連する問題