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