[C++] delete this

Sanjaz

Нужно написать метод Release у класса.
Можно сделать так?

class A
{
void Release
{ delete this; }
};

А то какие-то сомнения мучают.

Dasar

Можно.
Вот, например, код из atlcom.h

STDMETHOD_(ULONG, Release
{
ULONG l = InternalRelease;
if (l == 0)
delete this;
return l;
}

Sanjaz

Пасибо

VGordeev

А вот вопрос: а каков механизм очистки памяти? Этот код работает в многопоточных приложениях?
Честно признаться, просто хочется знать. И где про сие можно прочесть?

freezer

грубо говоря, сначала вызывается деструктор, потом free. Если рантайм многопоточный - все будет работать нормально в многопоточной проге

Julie16

>грубо говоря, сначала вызывается деструктор, потом free.
Неправда

freezer

не такая уж и неправда
Понятно, что оператор delete можно перегрузить, тогда будет вызываться что попросите

rosali

потом free
operator delete потом вызывается. Там может и не быть никакого free, что напишешь то и будет...

VGordeev

Да, верно, я просто немного неправильно представлял себе механизм размещения объектов в памяти...
Всем спасибо!
Оставить комментарий
Имя или ник:
Комментарий: