首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >析构函数被认为是常量函数吗?

析构函数被认为是常量函数吗?
EN

Stack Overflow用户
提问于 2011-12-04 09:02:57
回答 2查看 4.1K关注 0票数 26

考虑一下这个

代码语言:javascript
复制
class Foo
{
public:
    Foo(){}
    ~Foo(){}
    void NonConstBar() {}
    void ConstBar() const {}
};

int main()
{
    const Foo* pFoo = new Foo();
    pFoo->ConstBar(); //No error
    pFoo->NonConstBar(); //Compile error about non const function being invoked
    delete pFoo; //No error 

    return 0;
}

在main函数中,我同时调用了FooFoo非常数函数

尝试调用任何非常量函数都会在Visual Studio中产生错误,如下所示

error C2662: 'Foo::NonConstBar' : cannot convert 'this' pointer from 'const Foo' to 'Foo &'

但是delete pFoo不会发出任何这样的错误。delete语句被绑定为调用没有常量修饰符的Foo类的析构函数。析构函数还可以调用其他非常数成员函数。那么它是不是一个常量函数呢?或者在一个常量指针上删除是一个特殊的异常?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8372456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档