Рассмотрим это
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;
}
В основной функции я вызываю const и non const функции Foo
Попытка вызова любой неконстантной функции приводит к ошибке в Visual Studio, например:
error C2662: 'Foo::NonConstBar' : cannot convert 'this' pointer from 'const Foo' to 'Foo &'
Но delete pFoo
не выдает такой ошибки. Оператор delete обязан вызывать деструктор класса Foo , который не имеет модификатора const. Деструктору также разрешено вызывать другие неконстантные функции-члены. Так это константная функция или нет? Или удаление по константному указателю является специальным исключением?