Chinaunix首页 | 论坛 | 博客
  • 博客访问: 933302
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-23 15:12:04

问:
class Deleteable
{
public:
    virtual ~Deleteable() = 0 {}

    virtual void deleteSelf()
    { delete this; }
};
在g++3.4.2中为什么无法编译通过(vc++8.0可以)?

答:
ISO/IEC 14882:2003(E)第10.4.2中指出:
    [Note: a function declaration cannot provide both a pure-specifier and a definition
    —end note] [Example:
    struct C {
        virtual void f() = 0 { }; // ill-formed
    };
    —end example]
所以在这一点上,g++是符合C++标准的,标准方法应当写成:
class Deleteable
{
public:
    virtual ~Deleteable() = 0;

    virtual void deleteSelf()
    { delete this; }
};
inline Deleteable::~Deleteable()
{
}

阅读(1475) | 评论(8) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-23 15:13:19

sjdev
~

网友评论2012-11-23 15:12:45

周星星
纯虚和有函数体并不矛盾呀。
纯虚指名其必须在派生类中不作为纯虚实现才可以使用,并不表示其本身就不可以有实现。

网友评论2012-11-23 15:12:36

aurora
小弟刚学很多地方不懂啊,既然声明为纯虚函数了,为什么还要给出定义体呢?  
inline Deleteable::~Deleteable()
{
}
这样对吗?