std::enable_shared_from_this,非虚拟析构函数和公共继承



std::enable_shared_from_this类是一个(模板(mixin,建议用于从给定对象(或其地址(创建共享指针,这些对象都具有对象的共同所有权。

问题是,如果你有一个T类,它是:

  1. 具有虚拟方法
  2. std::enable_shared_from_this<T>继承(继承必须是公共的,如上面的链接所述;否则mixin就没用了(
  3. 使用-Wnon-virtual-dtor的GCC进行编译(也许也使用clang,我不确定(

您会收到关于std::enable_shared_from_this的非虚拟析构函数的警告。

我的问题是——这里的错在哪里?那就是…

  • std::enable_shared_from_this应该有一个虚拟析构函数吗?(我不这么认为(
  • 非虚拟析构函数警告是否应该在发出时采用某种标准(如果启用了,也就是说(
  • 应该保护std::enable_shared_from_this的析构函数吗?(这行得通吗?(
  • 具有此mixin的类是否应该根本不具有虚拟方法

我很困惑。

没有故障;你的代码很好。这只是一个假阳性。警告的目的是检测一些代码,这些代码虽然是有效的C++,但通常表明存在问题。但是";通常";并不意味着";总是";,因此,大多数警告都有误报的情况,即它认为存在滥用,而实际上没有。

std::enable_shared_from_this应该有一个虚拟析构函数吗?

不需要任何代码来删除指向enable_shared_from_this的指针。所以没有。

非虚拟析构函数警告是否应该在发出时采用某种标准(如果启用了,也就是说(?

编译器知道你打算做什么的一切是不合理的。它只是看到了一些通常是问题的东西,你决定让它标记出来。在这种情况下,这不是问题。

是否应该保护std::enable_shared_from_this的析构函数?

否。

具有此mixin的类是否应该根本没有虚拟方法?

否。

相关内容

  • 没有找到相关文章

最新更新