C++中基类继承 enable_shared_from_this 之后派生类无法使用 shared_from_this()
时间: 2024-12-21 13:29:38 浏览: 12
在C++中,`enable_shared_from_this`是一个特殊的模板类,它通常用于管理智能指针(如`std::shared_ptr`和`std::weak_ptr`),特别是当类实例作为另一个共享所有权的对象的一部分时。当你在一个类上继承了`enable_shared_from_this`,它会自动添加一些额外的功能,以便让你的类能够更容易地转换成一个`shared_ptr`。
如果你直接继承`enable_shared_from_this`,并且想要在派生类中使用`shared_from_this()`,你需要显式地声明并定义这个成员函数,因为不是所有的基类都会提供默认实现。例如:
```cpp
class Base : public enable_shared_from_this<Base> {
public:
// 如果没有覆盖,需要添加下面这行
std::shared_ptr<Base> shared_from_this() const override {
return shared_from_this();
}
};
class Derived : public Base {
public:
// 使用Derived的shared_from_this()
void foo() {
std::shared_ptr<Derived> derived = shared_from_this();
}
};
```
然而,如果派生类没有明确地这样做,而尝试直接调用`shared_from_this()`,可能会遇到编译错误,因为它找不到该函数。所以,正确的做法是在派生类中提供这个函数,并确保它能返回当前对象的`shared_ptr`引用。
阅读全文