我有一个宠物项目,我用它来试验 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
。
但我正在寻找解决这个问题的方法,所以我的问题是,有没有合适的方法来处理这个问题?并且:我认为这个析构函数是虚假的,还是有真正的目的,我是否正确?