构造函数和析构函数必须是虚的?

Constructors and destructor must be virtual?

构造函数或析构函数是否为虚函数之间存在一些差异?遇到这种情况,应该怎么办

class A {
public:
    A();
    ~A();
}

class A {
public:
    virtual A();
    virtual ~A();
}

这个案例有isocpp吗?

谢谢...

C++ 中不能有虚构造函数why no virtual Constructor

当您可以通过指向基 class 的指针删除派生 class 的实例时,虚拟析构函数很有用。参考When to use Virtual Destructor.

你不能有虚拟构造函数,但虚拟析构函数可以通过基 class 指针销毁对象,同时适当地调用派生析构函数。

例如,实际上运行这个代码

class A {
public:
    A() {}
    ~A() {}
};

class B : public A {
public:
    B() {}
    virtual ~B() {}
};

class C : public B {
public:
    C() : _p( new int(0) ) {}
    ~C() { delete _p; std::cout << "Deleted p" << std::endl; }
private:
    int *_p;
};


int main() {
    C *c1 = new C();
    C *c2 = new C();

    B *bPointer = c1;
    A *aPointer = c2;

    std::cout << "Deleting through B*" << std::endl;
    delete bPointer; // "deleted p"
    std::cout << "------------" << std::endl;
    std::cout << "Deleting through A*" << std::endl;
    delete aPointer; // No output

    return 0;
}

Class A 的析构函数应该标记为虚拟的。您只需要在层次结构的最顶层 class 写 virtual。