私は、ベクターに自分自身へのスマートポインタをプッシュすることができますクラスを実装しようとしています:にベクトル結果にshared_ptrの(これを)押す「)(フリー:無効なポインタ」エラー
#include <memory>
#include <vector>
class A {
public:
void pushme(std::vector<std::shared_ptr<A>> & vec) {
vec.push_back(std::shared_ptr<A>(this));
}
};
int main() {
A test;
std::vector<std::shared_ptr<A>> vec;
test.pushme(vec);
return 0;
}
これがうまくコンパイルしかし、実行時に私はfree(): invalid pointer
エラーが発生します。ここで何が起こっているのか理解してください。
、そのオブジェクトを解放する責任がありdeleter'あなたは理論的には '自動メモリに保存されているオブジェクトを指すshared_ptr'インスタンスを持っていると' DELETE'を持っていませんでしたので、 'shared_ptr'は、'カスタムを保持することができますすべての 'shared_ptr'インスタンスがスコープから外れたときにオブジェクトに対して呼び出されます。あなたはこれをするべきではありませんが、あなたはそれをすることができます。 –