новый, удалите, malloc и свободный

Этот вопрос задали мне в интервью:

В C++,

  1. что, если мы выделяем использование памяти malloc и используйте delete освободить ту выделенную память?
  2. что, если мы выделяем использование памяти new и освободите его использование free?

Каковы проблемы, с которыми мы столкнулись бы, если вышеупомянутые вещи используются в коде?

Мой ответ был нет никакого различия. Действительно ли я был прав в высказывании так?

13
задан manlio 14 March 2014 в 13:43
поделиться

2 ответа

Если вы это сделаете, вы столкнетесь с неопределенным поведением. Никогда не пытайтесь это сделать. Хотя новый может быть реализован с помощью malloc () , а delete может быть реализован с помощью free () , нет никакой гарантии, что они действительно реализованы. таким образом и пользователь также может перегрузить новый и удалить по своему усмотрению. Вы рискуете столкнуться с кучей коррупции.

Кроме этого, не забывайте, что когда вы вызываете malloc () , вы получаете необработанную память - конструктор не вызывается - и когда вы вызываете free () , деструктор не вызывается. . Это также может привести к неопределенному поведению и неправильному функционированию программы.

Суть в том ... никогда не делай этого.

14
ответ дан 2 December 2019 в 00:17
поделиться

1) Неопределенное поведение, но, вероятно, "сработает". Деструкторы будут вызываться при освобождении памяти, которая, возможно, не хочет деконструироваться.
2) Неопределенное поведение, но, вероятно, "сработает". Деструкторы НЕ будут вызваны.

т.е. ЕСЛИ он работает, и нет никаких гарантий, что он будет работать точно так, как требуется для базовых встроенных типов данных.

1
ответ дан 2 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: