私はnullptrに初期化したいメンバ変数としてshared_ptrを使用するクラスを持っています。これはなぜ間違っているのですか?コンパイラのエラーメッセージは、 "delete:ポインタではないオブジェクトを削除できません"です。私のコンストラクタがshared_ptrに間違っているのはなぜですか?
template<class T>
class Example:
public:
Example() : myptr(make_shared<Example<T>>), val(0) {}
private:
shared_ptr<Example<T>> myptr;
T val;
これは私のshared_ptrを作成し、それをnullptrに初期化すると考えました。
正しいコンストラクタはどのように見えますか?
どのようにあなたは、コンストラクタの外で 'make_shared'を使うのでしょうか? – juanchopanza
関連しないメモ:型 'T'に唯一の引数として整数をとるコンストラクタがない場合はどうなりますか?あなたがデフォルトで 'val'を構築したいなら、val()'を使います。 –
makeptrを使わずにmyptrをnullptrに初期化するだけです。 'Example():myptr {nullptr}、val {} {}' ? 実際にshared_ptrを宣言するだけで、デフォルトでnullに設定されます! – nitimalh