Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > delete: dызов деструктора при наследовании


Автор: Breezy 31.12.2005, 18:28
Собственно вопрос заключаеться в том как работает оператор delete, точнее что он удаляет.

псевдокод:

Код

class Object
{
        Object();
        ~Object();
        virtual ReSet();
}

Object::~Object()
{
        ReSet();
}

class Sample::Object
{
        Sample();
        ~Sample[s]();
        virtual ReSet();
}

.....

main()
{
        Object *pObject;
        Sample *pSample;

        pSample = new Sample[1];
        pObject = pSample;
        .....
        delete []pObject;
}


собственно оператор delete удаляет в памяти размер Object или Sample, или он сам знает размер какой былвыделен???
Знаю точно, что вызываеться деструктор обекта Object а не Sample.

Автор: Daevaorn 31.12.2005, 18:55
Цитата(Breezy @ 31.12.2005, 18:28)
или он сам знает размер какой былвыделен???

Конечно знает сам. В служебной облати выделенной памяти хранится размер этой самой памяти. Поэтому получишь только вызов не того конструтора, а память должна освободиться вся.

Автор: DeadSoul 31.12.2005, 19:39
Breezy, если дестуктор виртуальный, то все что надо будет удалено. И все нужные деструкторы вызовутся

Автор: nikitao 1.1.2006, 16:45
Именно поэтому динамическисозданный обьект всегда занимает чуть больше статическисозданного аналога.Обычно эта величина отличается на одно слово в котором хранится размер созданного обьекта с помощью new.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)