【发布时间】:2020-10-29 12:40:30
【问题描述】:
我想从派生类中获取 shared_ptr。std::enable_shared_ptr_from_this 由基类继承并获取 std::shared_ptr<Base>,但不是 std::shared<Derived>。我可以使用std::reinterpret_pointer_cast 或std::dynamic_pointer_cast 但是
- 代码太多了
- 使用多重继承是否安全?
还是只有这样?
示例代码:
class Base : public std::enable_shared_from_this<Base> {
};
class Derived : public Base {
public:
std::shared_ptr<Derived> GetPointer() const {
return shared_from_this(); // but it returns std::shared<Base> type
}
};
提前致谢!
【问题讨论】:
-
我想你或多或少地回答了你自己的问题。您可以使用
std::static_pointer_cast,因为您知道确切的类型,因此不需要动态转换。使用“太多代码”作为不以正确方式做某事的论据基本上总是一个不好的借口。在这种情况下,没有其他办法,如果你不进行强制转换,代码将无法编译。所以是的,这是安全的,也是唯一的方法。此外,它几乎没有很多额外的代码。 1 个函数中可能有 30 个额外字符...
标签: c++ stl shared-ptr