首页 > TAG信息列表 > virtual-destructor
c-当用非虚拟析构函数“删除”基类时,Clang和GCC会做什么?
已经有a question询问删除缺少虚拟析构函数的基类的指针的“现实世界”行为,但问题仅限于非常有限的情况(派生类没有具有非平凡析构函数的成员) ,并且可接受的答案只是说,如果不检查每个编译器的行为,就无法知道. ….但这实际上不是很有帮助;知道每个编译器的行为可能都不同,这并不c-缺少vtable通常意味着第一个非内联虚拟成员函数没有定义
我很确定这个问题是重复的,但是我的代码在这里有所不同,以下是我的代码.它失败,并显示“未定义符号”错误,不确定丢失了什么. class Parent { public : virtual int func () = 0; virtual ~Parent(); }; class Child : public Parent { public : intc – 虚拟继承中的析构函数
class Base{}; class D1:virtual public Base{}; class D2:virtual public Base{}; class DD:public D1,public D2{}; int main(){ Base *pBase=new DD; delete pBase; } 这导致崩溃,但我修改如下: class Base{ public: virtual ~Base(){}; }; class D1:virtual puc – 具有虚析构函数的基类的子类中的默认析构函数
我有一个带有虚拟析构函数的基类A. A有后代B和C,它们使用默认的析构函数.通过指向A的指针删除C的对象是否安全? 更具体地说,请考虑以下示例代码: class A { public: A(){}; virtual ~A() {/* code here */}; }; class B: public A { B() {/* code....*/};c – “删除”是否与多态性一起正常工作?
参见英文答案 > Virtual destructor and undefined behavior 4个 BaseClass * p = new DerivedClass(); delete p; 我知道第二行将调用基类的析构函数,如果它没有虚拟析构函数和派生类的析构函数,如果它