【发布时间】:2011-02-04 00:54:03
【问题描述】:
我有一个宠物项目,我用它来试验 C++11 的新特性。虽然我有 C 方面的经验,但我对 C++ 还是很陌生。为了训练自己掌握最佳实践(除了大量阅读),我启用了一些严格的编译器参数(使用 GCC 4.4.1):
-std=c++0x -Werror -Wall -Winline -Weffc++ -pedantic-errors
这对我来说效果很好。到现在为止,我已经能够解决所有的障碍。但是,我需要enable_shared_from_this,这给我带来了问题。在编译我的代码(可能由-Weffc++ 触发)时,我收到以下警告(在我的情况下是错误):
base class ‘class std::enable_shared_from_this<Package>’ has a non-virtual destructor
所以基本上,我对enable_shared_from_this 的这种实现有点困扰,因为:
- 旨在用于子类化的类的析构函数应该始终是虚拟的,恕我直言。
- 析构函数是空的,为什么还要它?
- 我无法想象有人会想通过引用
enable_shared_from_this来删除他们的实例。
但我正在寻找解决这个问题的方法,所以我的问题是,真的有合适的方法来处理这个问题吗?并且:我认为这个析构函数是假的是否正确,或者它有真正的目的?
【问题讨论】:
-
您尝试过私有继承还是受保护继承?它会改变诊断吗?
-
这是个好主意。但不幸的是,它没有。
-
-Weffc++会从标准库中触发很多无意义的(与库有关的)警告,这在in the FAQ 中被提及
标签: c++ gcc boost c++11 shared-ptr