将shared_ptr(this)推入向量会导致"free():invalid pointer"错误

mur*_*phy 2 c++ smart-pointers vector c++11

我正在尝试实现一个可以将智能指针推送到向量中的类:

#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;
}
Run Code Online (Sandbox Code Playgroud)

这很好地编译,但在执行时我得到一个free(): invalid pointer错误.请帮我理解这里发生了什么.

Sam*_*hik 9

A test;
Run Code Online (Sandbox Code Playgroud)

这在函数本地范围内声明了一个对象.超出范围时,对象将自动释放.

只能new管理动态范围(使用)创建的对象std::shared_ptr.这就是整个目的std::shared_ptr- delete当一个对象的最后一个共享指针消失时自动调用.你只能delete分配一些东西new.