14得票2回答
纯虚基类上的虚析构函数

我有一个问题struct IMyInterface { virtual method1() = 0; virtual method2() = 0; }; GCC坚持认为我有struct IMyInterface { virtual method1() = 0; virt...

14得票2回答
为什么虚析构函数需要使用delete运算符

在一个独立的情境中(没有标准库,例如在操作系统开发中),使用g++会发生以下现象:class Base { public: virtual ~Base() {} }; class Derived : public Base { public: ~Derived() {} }; ...

13得票1回答
如果您总是将接口存储在shared_ptr中,那么需要一个虚析构函数吗?

由于boost::/std::shared_ptr具有类型擦除其删除器的优点,因此您可以做出很棒的事情,例如:#include <memory> typedef std::shared_ptr<void> gc_ptr; int main(){ gc_ptr p...

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

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

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

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

12得票8回答
销毁顺序使用虚函数

请问在使用虚函数时,对象的销毁顺序是怎样的?它是从基类开始,然后再是派生类吗?

12得票3回答
如果派生类中没有数据成员,是否仍然需要使用虚析构函数?(C++)

假设我有这段代码class Base{ public: int getVal(); private: int a, b; }; class Derived::public Base{ public: void printVa...

11得票4回答
没有虚析构函数可能会导致内存泄漏吗?

#include <iostream> using namespace std; class base { int a; public: base() {a =0;} }; class derv :public base { int b; publi...

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

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

10得票5回答
何时以及为什么基类中的析构函数不应定义为虚函数?

下面的例子演示了如何防止派生类被复制。它基于一个基类,其中复制构造函数和复制赋值运算符都被声明为private。class Uncopyable { protected: // allow construction and destruction of derived objects.....