оператор new



Автор Паша Салтанов задал вопрос в разделе Другие языки и технологии

Операции new и delete. Операции new и delete нужна теори про данные операции. и получил лучший ответ

Ответ от Vera Yazvinskaya[гуру]
смотри msdn )
вот кое-что из Вики:
В языке программирования C++, new — оператор, обеспечивающий выделение динамической памяти в куче. За исключением формы, называемой «размещающей формой new», new пытается выделить достаточно памяти в куче для размещения новых данных и, в случае успеха, возвращает адрес свежевыделенной памяти. Однако, если new не может выделить память в куче, то он передаст (throw) исключение типа std::bad_alloc. Это устраняет необходимость явной проверки результата выделения.
Синтаксис new выглядит следующим образом:
p_var = new typename;
где p_var — ранее объявленный указатель типа typename. typename может подразумевать собой любой фундаментальный тип данных или объект, определенный пользователем (включая, enum, class и struct). Если typename — это тип класса или структуры, то он должен иметь доступный конструктор по умолчанию, который будет вызван для создания объекта.
Для инициализации новой переменной, созданной при помощи new нужно использовать следующий синтаксис:
p_var = new type(initializer);
где initializer — первоначальное значение, присвоенное новой переменной, а если type — тип класса, то initializer — аргумент (ы) конструктора.
new может также создавать массив:
p_var = new type [size];
В данном случае, size указывает размерность (длину) создаваемого одномерного массива. Адрес первого элемента возвращается и помещается в p_var, поэтому
p_var[n]
означает значение n-го элемента (считая от нулевой позиции)
Память, выделенная при помощи new, должна быть освобождена при помощи delete, дабы избежать утечки памяти. Массивы, выделенные (созданные) при помощи new[], должны освобождаться (уничтожаться) при помощи delete[].
int *p_scalar = new int(5);
int *p_array = new int[5];
Инициализаторы не могут быть указаны для массивов, созданных при помощи new. Все элементы массива инициализируются при помощи конструктора по умолчанию для данного типа. Если тип не имеет конструктора по умолчанию, выделенная область памяти не будет проинициализирована.
В языке программирования C++ оператор delete возвращает память, выделенную оператором new, обратно в кучу. Вызов delete должен происходить для каждого вызова new, дабы избежать утечки памяти. После вызова delete объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться. Многие программисты присваивают 0 (нуль-указатель) указателям после использования delete, чтобы минимизировать количество ошибок программирования. Однако нужно отметить, что удаление нуль-указателя фактически не имеет эффекта, так что нет необходимости проверять нуль-указатель перед вызовом delete.
Фрагмент кода в качестве примера:
int *p_var = null; // объявление нового указателя
p_var = new int; // память динамически выделяется
/* ...
остальной код
....*/
delete p_var; // память освобождается
p_var = null; // указатель заменяется на 0 (нуль-указатель)
Массивы, созданные (выделенные) при помощи new [], аналогичным образом могут быть уничтожены (совобождены) при помощи delete []:
int size = 10;
int *p_var = null; // объявление нового указателя
p_var = new int [size];// память динамически выделяется
/* ...
остальной код
....*/
delete [] p_var; // память освобождается
p_var = null; // указатель заменяется на 0 (нуль-указатель)
Вызов delete[] для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив.
p.s. Что касается строк, то это те же массивы, элементами которых являются символы.
Источник: учись google-ить!

Ответ от Александр Черкашин[активный]
гугл в помощ

Ответ от 0_ooo[гуру]
new - резервирует место под данные в области памяти динамического обмена
delete - освобождает
вот и все теория по этим операторам, если ниче не понятно - роемся в гугле в сторону динамической памяти и указателей.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Операции new и delete. Операции new и delete нужна теори про данные операции.

оператор new в C
А точно не float* array=new float[n1] ?

new - оператор C++, а не С. В С используется
подробнее...

Какая сотовая связь в Казахстане самая дешевая и качественная?
В Казахстане обычно связь внутри сети значительно дешевле звонков между сетями.
В настоящее
подробнее...
спросили в Qt
QT Linux
Сначала нужно создать главное окно (класс такой есть, QMainWindow называется, надо выводить от него
подробнее...

Что значит оператор bool, оператор new и символ * в языке C++??
bool - тип данных, принимает 2 логических значение true(правда) , false(лож) . Так же существуют
подробнее...

Программирование С++ Что такое Динамические массивы?
Ну вообще даже в Википедии есть объяснение этой технологии.
Грубо говоря это карман, размер
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Другое ActionScript
Как называется свойство находить объект по звуку?
Играли в детстве в жмурки?

#yaimg158949#
Вряд ли найдется кто-нибудь, незнакомый с
подробнее...

Актау -Казахстан кто что знает??
Актау нефтяная столица Каспииского моря, очень богатый город, с портом мирового масштаба и
подробнее...

чем отличается free от delete[ ] C++
delete вызывает деструктор, free этого делать не
подробнее...

Samsung galaxy pocket neo
вот что нашёл на сайте 4пда ПРАВДА ПРО БИЛАЙН (но думаю, что и на другие операторы тоже
подробнее...
спросили в Интернет Оператор
Какие коды MCC/MNC у операторов MTS (МТС) (Чел. обл.) и Мегафон?
Первые три - (250) МСС - одинаковые для всех операторов, две - MNC (уникально для оператора)

подробнее...

Операторы C++
.* и ->* - это ни разу не неизвестные операторы.
а шилдт, если помню, говорил о том, что
подробнее...

+7937*** ** ** что это за оператор и от куда?
ОАО "Мобильные Системы Связи-Поволжье"Самарская область937с 2100000 по 229999901.
подробнее...
спросили в MPM
Как установить логотип оператора на нокиа 5800 xpressmusic?
Ставим логотип оператора на Symbian 9.4
Для того чтобы поставить вместо стандартного названия
подробнее...
спросили в User all User all 0
Оператор присваивания C++
Проблема с самоприсваиванием давно и легко решена:

#include <iostream>подробнее...
New C++ на Википедии
Посмотрите статью на википедии про New C++
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*