46得票6回答
你的析构函数应该何时使用虚函数?

可能是重复问题: 何时使用虚析构函数? 在什么情况下,你的C++对象的析构函数应该是virtual?

13得票5回答
制作受保护的析构函数有必要使用虚函数吗?

/*Child is inherited from Parent*/ class Parent { public: Parent () //Constructor { cout << "\n Parent constructor call...

30得票3回答
我需要在子类的方法上也指定虚拟吗?

这个问题可能在SO上已经被问过,但我找不到类似的问题。 考虑以下类层次结构:class BritneySpears { public: virtual ~BritneySpears(); }; class Daughter1 : public BritneySpears { ...

24得票5回答
缺少vtable通常意味着第一个非内联虚拟成员函数没有定义。

我非常确定这个问题是重复的,但我的代码不同,以下是我的代码。它遇到了一个“未定义符号”的错误,不确定缺少什么。class Parent { public : virtual int func () = 0; virtual ~Parent(); }; cla...

12得票3回答
使用智能指针时,clang和gcc不会对多态性中的非虚拟基类析构函数发出警告?

我们知道,如果存在虚函数,则基类的析构函数也应标记为虚函数,否则使用基类指针显式删除派生对象时将产生未定义行为。如果我们希望使用基类指针删除派生对象,则必须将基类的析构函数标记为虚函数,否则会出现未定义的行为。 例如:struct Base { virtual void greet() ...

25得票4回答
C++中的虚默认析构函数

我有一组大量的继承类(criteria),它们都继承自一个基类(criterion)。这是criterion的代码:class criterion { public: virtual unsigned __int32 getPriorityClass() const = 0; ...

21得票3回答
使用虚析构函数,我是否需要为每个子类显式声明一个虚析构函数?

我有一个场景,我正在编写一些深层次的面向对象的代码,其中包含多个抽象基类层,我想知道我是否必须为每个基类显式声明析构函数。 编译器会生成默认的虚拟析构函数吗?还是我需要告诉它?

177得票7回答
为什么在C++中的抽象类中应该声明虚析构函数?

我知道在C++中为基类声明虚析构函数是一种良好的编程实践,但即使作为接口的抽象类,也有必要声明virtual析构函数吗?请提供一些原因和示例。

10得票3回答
基类有虚析构函数的子类中的默认析构函数

我有一个基类A,其中包含虚析构函数。派生类B和C使用默认的析构函数。通过指向A的指针删除C的对象是否安全? 更具体地说,考虑下面的示例代码: class A { public: A(){}; virtual ~A() {/* code here */}; }; ...

31得票4回答
C++11中具有虚成员的虚析构函数

在这些幻灯片中,关于C++11/14标准,在第15页上,作者写道,“许多经典编码规则已不再适用”于C++11。他提出了三个例子的清单,我同意三个规则和内存管理。 然而,他的第二个例子是“具有虚成员的虚析构函数”(只是这样)。 这是什么意思? 我知道必须声明基类的析构函数为虚函数,以便在出现像...