【发布时间】:2020-11-11 09:11:20
【问题描述】:
std::enable_shared_from_this 类是一个(模板)mixin,推荐用于从给定对象(或其地址)创建共享指针,这些对象都具有对象的共同所有权。
问题是,如果你有一个 T 类:
- 具有虚拟方法
- 从
std::enable_shared_from_this<T>继承(并且继承必须是公开的,如上面的链接中所述;否则mixin 无用) - 使用 GCC 和
-Wnon-virtual-dtor编译(也许还有 clang,我不确定)
您会收到有关 std::enable_shared_from_this 的非虚拟析构函数的警告。
我的问题是 - 这里的错误在哪里?那就是……
-
std::enable_shared_from_this应该有一个虚拟析构函数吗? (我不这么认为) - 非虚拟析构函数警告是否应采用某种标准来确定何时发出(即如果已启用)?
- 应该保护
std::enable_shared_from_this的析构函数吗? (这甚至会起作用吗?) - 具有此 mixin 的类应该根本没有虚拟方法吗?
我很困惑。
【问题讨论】:
-
@MarshallClow:这肯定是相关的,但那里的讨论没有考虑我提到的两种可能的替代方案。我对那里没有提到的“受保护的 dtor”替代方案特别感兴趣。
标签: c++ compiler-warnings libstdc++ virtual-destructor enable-shared-from-this