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