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

C++ 如何实现纯虚拟析构函数?,c++,abstract-class,instantiation,pure-virtual,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; } 当我尝试实例化c时,我得到以下错误: 1

以下是代码的格式:

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;
}
当我尝试实例化
c
时,我得到以下错误:

1>c:\main.cpp(59): error C2259: 'C' : cannot instantiate abstract class

我知道我不能调用虚拟析构函数,但是在概念上有一些我不知道的东西。有人能解释一下吗?

“=0”表示您将此方法定义为纯虚拟方法。如果类包含任何纯虚拟方法,则该类是纯虚拟的。您不能实例化纯虚拟类,因为没有纯虚拟方法的实现。

您不能实例化
C
,因为您已经明确表示它的析构函数未定义

你可以这样做:

class C
{
public:
    C();
    virtual ~C() {}
};
相反


只要你不尝试实例化它,你就可以离开<代码> C <代码>,即你只创建<代码> d>代码> s,但是你可以把它们作为“<代码> C <代码> > S.< /P> < P> > C类,在C++中被称为“代码>抽象类< /代码>,不能初始化。

§10.4/2抽象类抽象类是指可以使用的类 仅作为其他类的基类;没有抽象对象 类可以创建,但作为从其派生的类的子对象除外。 如果一个类至少有一个纯虚函数,那么它就是抽象的

C*C=new C();
更改为
C*C=new D();
应该可以工作

或者您可以通过删除
=0

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

C* c = new C();  // this is ok

你不能实例化一个有纯虚方法的类。如果你想实例化
C
,你不应该有任何纯函数。你确定你需要你的析构函数是纯函数吗?可能是@chris的副本,我知道。如果我有纯虚析构函数呢?如何解决上述问题?@Ashwinkumar:问题是t你们两个(1)在你们的类中有一个纯虚拟析构函数,(2)正在尝试实例化该类。这可以通过(1)在你们的类中没有纯虚拟析构函数或(2)不尝试实例化它来解决。这解释了我的问题。谢谢+1。添加了段落号以减少标准参考位置的歧义。