c++: delete vs delete[]
delete[] ss;
а разве не просто delete ss ?
и кстати, в чём разница между delete и delete[] ?
и кстати, в чём разница между delete и delete[] ?
В данном случае сработает одинаково. Разница в том, что при удалении массива вызываются деструкторы.
>В данном случае сработает одинаково
вроде бы стандарт этого совсем не гарантирует
вроде бы стандарт этого совсем не гарантирует
delete[] вызывает деструктор для каждого элемента
Разницы нет... посмотрите откомпилированый код.
Просто синтаксис, что бы на глаз отличить что удаляется один объект или массив.
Просто синтаксис, что бы на глаз отличить что удаляется один объект или массив.
Разница есть, правильно сказал: если удаляешь массив объектов, то delete[] вызовет деструктор для каждого из них, а delete просто освободит память.
repeat: посмотрите откомпилированый код.
repeat: в случае простых типов разницы нет. вопрос вроде как исчерпан.
hint: совпадение откомпилированного кода не является достаточным условием отсутствия разницы
С чего это?
Ещё скажи что это не одно и тоже.это не одно и тоже!
Потому что работоспособность и идентичность кода на конкретной версии конкретного компилятора не гарантирует его правильности и работоспособности в других условиях.
Действительно, для любого вменяемого компилятора разница будет в вызове/невызове деструктора. Конкретный пример будет работать во всех вменяемых условиях.
НО Надо писать delete[] для массивов и delete для одиночных элементов, потому что это правильно, и не заморачиваться.
Действительно, для любого вменяемого компилятора разница будет в вызове/невызове деструктора. Конкретный пример будет работать во всех вменяемых условиях.
НО Надо писать delete[] для массивов и delete для одиночных элементов, потому что это правильно, и не заморачиваться.
Совпадение генетического кода не является условием однообразия животных.
При чем я совершенно согласен что delete и delete[] одинаковые только с случае простых типов.
При чем я совершенно согласен что delete и delete[] одинаковые только с случае простых типов.
> При чем я совершенно согласен что delete и delete[] одинаковые только с случае простых типов.
так обычно бывает, но никто не гарантирует, что так бывает всегда.
можно даже постараться и найти реальный ситуацию/компилятор, в котором даже для простых типов код будет разный.
так обычно бывает, но никто не гарантирует, что так бывает всегда.
можно даже постараться и найти реальный ситуацию/компилятор, в котором даже для простых типов код будет разный.
можно даже постараться и найти реальный ситуацию/компилятор, в котором даже для простых типов код будет разныйНу попробуй.

если new перегружать, то код разные не будет?
Для простых типов не перегрузишь 

void * operator new[](size_t i)
{
std::cout << "new[] " << i << std::endl;
return malloc(i);
};
void * operator new(size_t i)
{
std::cout << "new " << i << std::endl;
return malloc(i);
};
int main(array<System::String ^> ^args)
{
int * arr = new int[5];
int * p = new int(4);
return 0;
}
Выводы:
1. даже для простых типов при использовании delete вместо delele[] можно легко словить core dumped
2. если в частном случае код совпадает, то это совсем не означает, что он будет совпадать всегда
1. даже для простых типов при использовании delete вместо delele[] можно легко словить core dumped
2. если в частном случае код совпадает, то это совсем не означает, что он будет совпадать всегда
Оставить комментарий
vladan67
как освободить память,если забили ее так:char* ss = new char [300]
?