![]() |
1
41
您应该始终使用带有接口的虚拟析构函数。例证:
现在它将使用什么析构函数?显然不是lion的析构函数,因为接口 不知道狮子的毁灭者 . 因此,如果您的接口没有内存管理,请使用此选项:
|
![]() |
2
20
退房 this 文章作者:Herb Sutter 尤其是这部分:
这假设基类是一个“interface”类,因为它通常应该是这样的。 |
![]() |
3
5
这取决于您是否打算使用指向接口类的指针以多态方式管理对象的生存期。 如果你这样做,那么析构函数 必须 虚拟,以便正确删除对象。删除没有虚拟析构函数的基类指针无效,并给出未定义的行为。 如果不这样做,那么应该通过使析构函数非虚拟且受保护来强制执行此操作,因此只能删除派生类。 |
![]() |
4
1
我认为它应该是接口的纯虚拟析构函数,所有其他方法也是纯虚拟的。 |
![]() |
5
0
不使析构函数成为虚拟的唯一原因是为了节省
|
![]() |
6
0
可能应该包含一个空的构造函数,因为一个接口的典型使用涉及将指向某个具体对象的指针放在容器中,否则将调用错误的析构函数,并且不会正确地清理内存。 因此,如果有人要通过指向iAnimal的指针删除派生对象,请生成一个虚拟析构函数,否则将使析构函数无效并受到保护。 将析构函数设为纯虚拟的可能不是一个好主意,因为它强制派生类的实现者重写析构函数,尽管他们可能什么都不想做。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |