c++ - C++ 类接口(interface)类的析构函数

开始在现有代码库上使用 PC-Lint(恐惧和恐惧)。

它提示的一件事是:

 class IBatch
 {
 public:
    virtual void StartBatch() =0;
    virtual int CommitBatch() =0;
 };

当另一个类从中派生以像接口(interface)一样使用它时

base class 'IBatch' has no destructor

所以,问题是:当你像上面那样创建 Interface 类时,你总是包含一个虚拟析构函数吗?为什么? (是样式错误还是编码错误?)

编辑:应该说我不希望或不希望 IBatch 的 user 破坏,他们只是服务的消费者,通过这个接口(interface)到某个外部实现类(如果那样的话有所作为)

最佳答案

A base class destructor should be either public and virtual, or protected and nonvirtual.

(Herb Sutter, Guru of the Week #18: "Virtuality")

https://stackoverflow.com/questions/2691611/

相关文章:

c++ - 动态数组上基于范围的for循环?

c++ - `typedef typename Foo::Bar Bar'的模板声明

c++ - 为什么在传递给另一个对象时调用 const 对象上的 std::move 会调用复制构造

c++ - 在构造函数中调用类成员的构造函数

c++ - 在创建派生类对象时将参数传递给基类构造函数

c++ - .o、.a 和 .so 文件有什么区别?

c++ - 如何将 long 移位超过 32 位?

c++ - range-for循环中的访问索引

c++ - 我可以使用基于范围的 for 循环轻松迭代 map 的值吗?

c++ - openMP 嵌套并行 for 循环与内部并行 for