C new delete
Автор Tvo9_tesha Петрушка_Керосиновая задал вопрос в разделе Другие языки и технологии
чем отличается free от delete[ ] C++ и получил лучший ответ
Ответ от Николай Веселуха[гуру]
delete вызывает деструктор, free этого делать не умеет.
Ответ от Анатолий Широков[активный]
free пара к malloc/calloc, delete пара к new, delete [] пара к new [] и смешивать их UB
free пара к malloc/calloc, delete пара к new, delete [] пара к new [] и смешивать их UB
Ответ от Mr. Nobody[гуру]
free осталось от языка C, используется с функциями calloc, malloc, realloc. Оператор delete следует использовать с оператором new ("оператор" - неправильный перевод английского слова "operator", лучше перевести "операция"
delete вызывает деструктор, free нет. Поэтому использовать пару malloc/free для классов нельзя (+malloc не вызывает конструктор, к тому же, и не разбирается с виртуальными методами) . Вполне допустимо в коде использовать для классов пару new/delete, а для простых переменных - malloc/free. Только зачем, new/delete может работать как с классами, так и с обычными переменными. а) нельзя удалить память, выделенную оператором new, с помощью free, можно только с помощью delete;б) нельзя удалить память, выделенную оператором malloc, с помощью delete, можно только с пом, free;в) delete гибче.
г) при работе с пользовательскими типами оператор delete можно перегрузить в соответствии с текущей необходимостью, а функция free такой возможности не предоставляет.
free осталось от языка C, используется с функциями calloc, malloc, realloc. Оператор delete следует использовать с оператором new ("оператор" - неправильный перевод английского слова "operator", лучше перевести "операция"
delete вызывает деструктор, free нет. Поэтому использовать пару malloc/free для классов нельзя (+malloc не вызывает конструктор, к тому же, и не разбирается с виртуальными методами) . Вполне допустимо в коде использовать для классов пару new/delete, а для простых переменных - malloc/free. Только зачем, new/delete может работать как с классами, так и с обычными переменными. а) нельзя удалить память, выделенную оператором new, с помощью free, можно только с помощью delete;б) нельзя удалить память, выделенную оператором malloc, с помощью delete, можно только с пом, free;в) delete гибче.
г) при работе с пользовательскими типами оператор delete можно перегрузить в соответствии с текущей необходимостью, а функция free такой возможности не предоставляет.
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: чем отличается free от delete[ ] C++
спросили в New
Операции new и delete. Операции new и delete нужна теори про данные операции.
смотри msdn )
вот кое-что из Вики:
В языке программирования C++, new —
подробнее...
Операции new и delete. Операции new и delete нужна теори про данные операции.
смотри msdn )
вот кое-что из Вики:
В языке программирования C++, new —
подробнее...
Как в C++ объявить массив с количеством элементов, хранящимся в переменной?
Если число не является константой, то так:
cin >> N; // Это чисто для примера, что N не
подробнее...
Поиск совпадающих символов в строке в C++ builder
a4,k4,h4,m4.. не путаешься?
Значение, возвращаемое c_str, необходимо опировать В ЭТОМ ЖЕ
подробнее...
Как передать указатель на двухмерный динамический массив в функцию? (C++)
На самом деле у тебя не двухмерный массив, а одномерный массив указателей.
Можно сделать чтобы
подробнее...
C++ Запись в файл. Как записать динамический массив в файл? Желательно кусок кода с комментариями
int *mass = new int[5];//объявляем дин. массив
ofstream fout("Tvoi_fail");
for(int i =
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Выводить
C++, вывод char в file.
Вывод в файл:
#include <fstream>
#include <iostream>
#include
подробнее...
C++, вывод char в file.
Вывод в файл:
#include <fstream>
#include <iostream>
#include
подробнее...
Ввод массива с клавиатуры C++
int* arr = nullptr;
int sz = 0;
void add( int i ){
int* new_arr = new
подробнее...
Можно ли в C++ создавать массивы структур?
Нет проблем.
struct MyStruct
{
int m_nMemeber;
};
MyStruct *p = new
подробнее...
C++ передача структуры в поток в _beginthread
st *yourStruct = new st;
_beginthread(lalalala, 0, (void*) yourStruct);
В твоем треде
подробнее...
спросили в Конец Списки
C++. Указатели. Связный список. Как добавить элемент в конец списка? Вопрос для разбирающихся
Ваш next, последнего элемента в списке указывает на NULL, а новый элемент списка вы создаёте по
подробнее...
C++. Указатели. Связный список. Как добавить элемент в конец списка? Вопрос для разбирающихся
Ваш next, последнего элемента в списке указывает на NULL, а новый элемент списка вы создаёте по
подробнее...
C++. Работа со строковыми массивами.
Половина кода все равно съелась. Юзай pastebin.com
Единственное что могу предположить - нужно
подробнее...
c++ ,Cписки, List
Поищи книгу Фрэнк. М. Каррано, Джанет Дж. Причард
Абстракция данных и решение задач на
подробнее...
C++ Вопрос по конструктору копии или копирования
Конструктор копирования следует реализовать тогда, когда в классе существует указатель по которому
подробнее...
C++ Как правильно в данном случае освободить память?
Смотрите, что вы делаете:
CString * message = new CString(""); // выделили память, создали
подробнее...
Как восстановить систему через диспетчер задач, пуск не открывается!
Вот команда для запуска восстановления системы из командной строки
подробнее...