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
。理由は次のとおりです。
- サブクラス化を目的としたクラスのデストラクタは、常に仮想である必要があります、IMHO。
- デストラクタは空ですが、なぜそれがあるのですか?
- を参照してインスタンスを削除したいと思う人はいないと思います
enable_shared_from_this
。
しかし、私はこれに対処する方法を探しているので、私の質問は本当に、これに対処する適切な方法はありますか?そして:私はこのデストラクタが偽物であると考えるのは正しいですか、それともそれに本当の目的がありますか?