Re[4]: Нельзя определить размер динам. массива, хотя delete[
От: Bell Россия  
Дата: 22.02.06 13:50
Оценка:
Здравствуйте, Яшин Евгений, Вы писали:


ЯЕ>Хорошо, т.е. вы хотите сказать, что вот в таком коде


ЯЕ>
ЯЕ>class C
ЯЕ>{
ЯЕ>    int v;
ЯЕ>    ~C(){}
ЯЕ>};

ЯЕ>void f()
ЯЕ>{
ЯЕ>    C* ptr = new C[100];
ЯЕ>    delete[] (int*)ptr;
ЯЕ>}
ЯЕ>


ЯЕ>компилятор просто не сможет правильно вычислить адрес начала "сырой" выделеной памяти и, попросту говоря, всё хлопнеться?

VC7.1 — AV.

ЯЕ>А вы сможете подтвердить такое поведение пунктом стандарта?

Да хоть вот это:
5.3.5/3
...In the second alternative (delete array) if the dynamic type of the
object to be deleted differs from its static type, the behavior is undefined

Динамический тип операнда — C*, а статический — int* — имеем неопределенное поведение.

ЗЫ
Быть может будет интересно еще кое-что о delete []
Автор:
Дата: 30.11.05
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.