私はC++ 11プロジェクトに取り組んでいます。その中に私はを持っていますstd::string
データ。shared_ptrを使用する場合、デストラクター、コピーコンストラクター、代入演算子を実装する必要があります
class Base {
public:
Base() : Base(string()) {}
virtual ~Base() = default;
Base(const string &str) {
str_ = std::make_shared<string>(str);
}
private:
std::shared_ptr<std::string> str_;
};
私の質問は:ここで私はコピーの世話をするために、コンストラクタと代入演算子をコピーし、str_
を解放するデストラクタを実装する必要がありますか? コンパイラが提供するデフォルトのものに頼っていれば十分ですか? は、私が「正しい」となりますBase *b1 = new Base("string");
いいえ、作成する必要はありません。 –
なぜ文字列を保持するためにshared_ptrを使用していますか?あなたは本当にこのオブジェクトのコピーが非常に同じ文字列を参照するようにしますか?もしそうなら、なぜですか? –
デフォルトで提供される単純なmemberwise-copyが十分であるため、コンパイラによって提供されるデフォルトの実装に頼ることができます。 –