结论:
shared_from_this 要求对象在创建之初就是通过 make_shared 或者 std::shared_ptr 的构造来完成的,不能如下几种情况:
1) heap new 出来且没使用 make_shared 或者 std::shared_ptr 新创建一个 shared_ptr 实例;
2)不能是 unique_ptr 实例,即便是通过 release() 转换成 裸指针都不行,会导致奔溃和卡住,这一点很奇怪,感觉像bug,这里极其容易犯错;
正确的例子:
#include <thread>
#include <memory>
#include <iostream>
#include <string>
class A:public std::enable_shared_from_this<A>{
public:
static void looper(std::shared_ptr<A> pins){
std::cout << "enter" << std::endl;
}
void start(){
_t = std::thread(&looper,shared_from_this());
}
std::thread _t;
};
int main()
{
std::shared_ptr<A> pa(new A);
pa->start();
while(1);
std::cout << "end" << std::endl;
}
或者
std::shared_ptr<A> spa = std::shared_ptr<A>(pa);
或者