考虑一下这个
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函数中,我同时调用了Foo和Foo的非常数函数
尝试调用任何非常量函数都会在Visual Studio中产生错误,如下所示
error C2662: 'Foo::NonConstBar' : cannot convert 'this' pointer from 'const Foo' to 'Foo &'
但是delete pFoo
不会发出任何这样的错误。delete语句被绑定为调用没有常量修饰符的Foo类的析构函数。析构函数还可以调用其他非常数成员函数。那么它是不是一个常量函数呢?或者在一个常量指针上删除是一个特殊的异常?
https://stackoverflow.com/questions/8372456
复制相似问题