平常使用enable_shared_from_this,也是因为没有遇到问题,所以就没有了解实现原理。一般我们使用的方式是如下定义和使用:
#include <memory>
#include <thread>
class Base: public std::enable_shared_from_this<Base> {
public:
Base() = default;
void start() {
thread_ = std::make_shared<std::thread>(
std::bind(&test, shared_from_this())
);
thread_->detach();
}
void test() {}
private:
std::shared_ptr<std::thread> thread_;
};
int main() {
std::shared_ptr<Base> base = std::make_shared<Base>();
base->start();
return 0;
}
这就是经常使用的方式,形成了惯性思维。但是了解一下原理还是可以的或者说有必要的,有利于我们对语言更多理解,对于新手也避免出错。
这里列一些错误的使用场景:
#include <memory>
#include <thread>
class Base: public std::enable_shared_from_this<Base> {
public:
Base() &#