如何实现纯虚拟析构函数?

Ash*_*mar 0 c++ abstract-class instantiation pure-virtual

这是代码的格式:

class C
{
public:
    C();
    virtual ~C() = 0;
};

class D : public C
{
public:
    D();
    ~D();
};

C::C(){
}

C::~C(){
}

D::D(){
}

D::~D(){
}

int main(){
    C *c = new C();
    D *d = new D();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实例化时,c我收到以下错误:

1>c:\main.cpp(59): error C2259: 'C' : cannot instantiate abstract class
Run Code Online (Sandbox Code Playgroud)

我知道我无法调用虚拟析构函数,但在概念上有一些我不知道的东西.有人可以解释一下吗?

Joh*_*136 5

您无法实例化,C因为您已明确表示它的析构函数未定义.

你可以这样做:

class C
{
public:
    C();
    virtual ~C() {}
};
Run Code Online (Sandbox Code Playgroud)

代替.

C只要你不尝试实例化它就可以完全"按原样" 保留(即你只创建Ds,但你可以将它们作为Cs 传递.