在我的C++应用程序中定义IHaveVirtualDestructor基类是一种好的做法吗
Is it a good practice to define IHaveVirtualDestructor base class in my C++ application?
我想定义一个如下所示的类:
class IHaveVirtualDestructor
{
public:
virtual ~IHaveVirtualDestructor();
};
我希望我所有的接口和抽象类都继承这个类。这是一个好的做法吗?还是每个接口/抽象类都应该定义自己的虚拟析构函数?缺点是什么?
我不确定这是否值得,但如果我要这样做,我会给这个类一个名称来表达它的目的,而不是它的实现。类似Interface
或PolymorphicObject
的东西。
我希望我的所有接口和抽象类都继承这个类。这是一个好的做法吗?
听起来不错。其优点更类似于noncopyable
类。
任何从它们派生的类看起来都像是通过快速浏览而记录的,否则必须查看析构函数的声明以确保析构函数是否为virtual
。
使默认构造函数protected
是个好主意:
class IHaveVirtualDestructor
{
protected:
virtual ~IHaveVirtualDestructor() {} //make it protected as well
IHaveVirtualDestructor() {}
};
可能需要一个更好的名称:
- AbstractBase
- PolymorphicObject(取自@James Kanze的回答)
这取决于您认为是更难忘记向类添加虚拟析构函数,还是更难忘记将IHaveVirtualDestructor添加为基类。
如果我害怕这样的错误,我会倾向于使用静态代码分析器。
想想课堂上的读者。必须查找IHaveVirtualDestructor。看到一个虚拟的、内联的、空的析构函数要习惯得多。
亲切问候Torsten
如果基类发行器定义为虚拟的,则所有子类都将具有隐式虚拟发行器。如果你将发行器定义为纯虚拟发行器,如果它的目的是强迫子类定义虚拟发行器(),那就更好了
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 是否有一种简单的方法可以从普通的 win32 C++代码向应用程序见解提供数据?
- 是否有一种跨平台的方法可以在使用 C++ 编写的二进制应用程序中嵌入资源?
- 有没有一种方法可以测量桌面应用程序 UI 响应时间
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在我的C++应用程序中定义IHaveVirtualDestructor基类是一种好的做法吗
- 获取第三方点击一次应用程序的配置文件夹
- 有没有一种方法可以在Mac中以无头的方式运行GUI应用程序
- 有没有一种更快的方法可以在SIMD上乘以2(不使用多重应用程序)
- 另一种检查应用程序是否安装在MAC OS X上的方法
- 是否有一种方法可以改变MFC SDI应用程序的标题字体?
- 在Windows OpenGL应用程序中是否有一种优雅的方式来处理在全屏和窗口模式之间切换
- 在linux和windows的c++应用程序中,有没有一种标准的方法来捕获键盘输入?
- 是否有一种方法可以不杀死抛出std::bad_alloc的Qt应用程序?
- 一种不使用XAML关闭DirectX Metro应用程序的方法
- 是否有一种方法来创建一个文件,只有我的应用程序可以访问使用vc++
- 使用c++,在制作控制台应用程序时,是否有一种方法可以让cin接受输入的下一个字符并在不按回车键的情况下继续
- c++:如果发生段错误或类似的事情,是否有一种方法可以终止单个线程,但保持应用程序运行