Мой вопрос, в частности, касается массивов, , а не объектов.
Есть несколько вопросов по SO о malloc()
/ free()
против new
/ delete
, но все они сосредоточены на различиях в том, как они используются. Я понимаю, как они используются, но я не понимаю, какие основные различия вызывают различия в использовании.
Я часто слышу, как программисты на C говорят, что malloc()
и free()
- это дорогостоящие операции, но я никогда не слышал, чтобы программисты на C ++ говорили это о new
и delete
. Я также заметил, что в C ++ нет операции, которая соответствует C realloc()
.
Если бы я писал эквивалент класса C ++ vector
, я бы хотел избежать копирования всего массива при изменении его размера, но с new
и delete
вам придется копировать. В C я бы просто realloc()
. Стоит отметить, что realloc()
может просто скопировать весь массив, но у меня сложилось впечатление, что он использовал тот же указатель и выделил для него меньше места, по крайней мере при уменьшении размера.
Итак, мой вопрос, как алгоритмы, используемые malloc()
и free()
, отличаются от алгоритмов, используемых new
и delete
. Более конкретно, почему способ C имеет клеймо быть более дорогим, и почему способ C ++ не позволяет изменять размеры без копирования?