[c++] delete vs delete []
в релизе проканает скорей всего
по стандарту - undefined behaviour
имхо
проканаетто есть утечки не будет?
насчет ассерта я сильно сомневаюсь.
а про ассерт - да, проверил в vs2005, действительно нету в коде ассерта
ну да, хуле, в delete размер удаляемого объекта не передается
так что код
#include <iostream>
using namespace std;
class A
{
public:
~A{cout << "~A\n";}
};
int main
{
A *a;
a = new A[3];
delete a;
cout << "--------------\n";
a = new A[10];
delete[] a;
return 0;
}
выведет тебе
~Aкомпил g++ под линух
--------------
~A
~A
~A
~A
~A
~A
~A
~A
~A
~A
upd. по поводу утечки - сам подумай, к чему может привести не вызванный дестркутор для почти всех элементов массива. Хотя, для типов типа int, double и т.п. разницы действительно нет. кроме как если кто-то встретит у тебя в коде такое удаление массива - то явно будет от тебя не в востроге
а причем тут классы и деструкторы?
потому что delete и delete[] на практике различаются только для классов. Так что чтобы объяснить чем они отличаются, полюбому нужны же классы. Для типов результат выполнения будет один и тот же - но тут уже вопрос больше стиля. меня, например, нервирует удаление массива через delete...
в теме присутствует char и не интересует как "должно быть".
надо найти ответы на вопросы в первом посте.
потому что delete и delete[] на практике различаются только для классоввот тут поподробнее.
то есть для char эти два оператора работают эквивалентно? по стандарту?
какие проблемы будут?
char* t = new char[5000];
char* s = t + 1;
delete s;
по стандарту - неправильный выбор оператора - undefined behaviour
какие проблемы будут?песда
все ли компиляторы себе такое позволяют?:)
песданадо поискать в мсдн...
проверил в VS2005 ? =)
если песда случится, то можно считать, что тебе повезло (если твой код ненарочно пытается освободить память по неверному указателю)
смысл простой: нихуя не понятно, что ты имеешь в виду под этим странным словом. это никак не описывает последствия
будут ли утечки? будет ли исключение?
по факту (vs2005) будет утечка и будет ассерт
гуд)
Оставить комментарий
Maurog
я помню, что был флуд на эту тему, но не могу найтидайте ссылочку или еще раз пофлудим
будет ли утечка памяти в таком коде (C++)?
как должно быть по стандарту и как это работает на практике (используя распространенные компиляторы)?