Считается ли деструктор константной функцией?

Рассмотрим это

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. Деструктору также разрешено вызывать другие неконстантные функции-члены. Так это константная функция или нет? Или удаление по константному указателю является особым исключением?

22
задан parapura rajkumar 4 December 2011 в 01:02
поделиться