Вопросы с тегом 'delete-operator'

На языке программирования С++ оператор delete вызывает деструктор данного аргумента и возвращает память, выделенную новой, обратно в кучу.
6

Удаление указателя в С++

Контекст: я пытаюсь обернуть голову вокруг указателей, мы просто видели их пару недель назад в школе, и, практикуя сегодня, я наткнулся на глупость? проблема, это может быть очень просто для вас, но у меня мало опыта программирования. Я видел доволь...
04 нояб. '12 в 22:02
10

Есть ли причина проверить указатель NULL перед удалением?

Я часто вижу проверку устаревшего кода для NULL перед удалением указателя, аналогичного, if (NULL != pSomeObject) { delete pSomeObject; pSomeObject = NULL; } Есть ли какая-нибудь причина для проверки указателя NULL перед удалением? Како...
05 мар. '09 в 15:47
11

Вызов удаления по переменной, выделенной в стеке

Игнорируя стиль и дизайн программирования, безопасно ли вызывать delete для переменной, выделенной в стеке? Например: int nAmount; delete &nAmount; или class sample { public: sample(); ~sample() { delete &nAmount;} int ...
14 янв. '09 в 3:41
6

Почему GCC не оптимизирует удаление нулевых указателей в С++?

Рассмотрим простую программу: int main() { int* ptr = nullptr; delete ptr; } С GCC (7.2) в результирующей программе есть инструкция call относительно operator delete. С компиляторами Clang и Intel таких инструкций нет, удаление нулевого указа...
15 авг. '17 в 9:01
6

Двойное освобождение или повреждение после очереди :: push

#include <queue> using namespace std; class Test{ int *myArray; public: Test(){ myArray = new int[10]; } ~Test(){ delete[] myArray; } }; int main(){ queue<Test> q Test t; q.pus...
28 дек. '12 в 2:21
15

Почему мне нужно удалить []?

Скажем, у меня есть такая функция: int main() { char* str = new char[10]; for(int i=0;i<5;i++) { //Do stuff with str } delete[] str; return 0; } Почему мне нужно удалить str, если я все равно закончу программу...
18 мар. '13 в 22:24
4

Временная сложность оператора delete []

Какова временная сложность оператора delete[]? Я имею в виду, как это реализовано - выполняет ли он все элементы в массиве и вызывает деструктор для каждого элемента? Этот оператор делает то же самое для примитивных типов (int и т.д.) и определенн...
12 янв. '14 в 16:27
3

Почему не помещаются слова `new` и` delete`, встроенные в язык, а не только обычные функции?

Почему не было размещения new выражение и delete выражение реализовано как встроенный язык вместо обычных функций? Если у нас есть... способ запроса/возврата памяти в ОС способ явного вызова конструктора (размещение new) способ явно вызвать дес...
07 июл. '17 в 11:40
3

Как управлять стратегией распределения памяти в коде сторонней библиотеки?

Предыдущий заголовок: "Должен ли я заменять глобальные операторы new и delete, чтобы изменить стратегию распределения памяти в стороннем коде?" Рассказ: Нам нужно заменить технологию выделения памяти в сторонней библиотеке, не изменяя ее исходный...
04 мая '13 в 19:14
4

Как интеллектуальные указатели выбирают между удалением и удалением []?

Рассмотрим: delete new std :: string [2]; delete [] new std :: string; Всем известно, что первая ошибка. Если вторая ошибка не была, нам не нужны два разных оператора. Теперь рассмотрим: std :: unique_ptr <int> x (new int [2]); std :: uniq...
20 янв. '12 в 11:44
3

Как удалить указатель void?

Есть ли что-то неправильное при удалении такого объекта в С++? MyCls* c = new MyCls(); void* p = (void*)c; delete (MyCls*)p;
16 июл. '14 в 5:18
5

Почему поведение undefined удаляет [] массив производных объектов с помощью базового указателя?

Я нашел следующий сниппет в стандарте С++ 03 в разделе 5.3.5 [expr.delete] p3: В первом альтернативе (объект удаления), если статический тип объекта, который нужно удалить, отличается от его динамического типа, статический тип должен быть базовым ...
30 мая '11 в 2:35
8

С++ Массив указателей: удалить или удалить []?

Косидеру следующий код: class Foo { Monster* monsters[6]; Foo() { for (int i = 0; i < 6; i++) { monsters[i] = new Monster(); } } virtual ~Foo(); } Каков правильный деструктор? Foo::~F...
11 мая '10 в 20:28
4

Почему моя программа падает, когда я увеличиваю указатель и удаляю его?

Я решал некоторые упражнения по программированию, когда понял, что у меня большое недоразумение в отношении указателей. Пожалуйста, кто-нибудь может объяснить причину, по которой этот код вызывает сбой на С++. #include <iostream> int main() {...
16 дек. '16 в 12:08
4

С++ удалить вектор, объекты, свободную память

Я полностью запутался в отношении удаления вещей в С++ Если я объявляю массив объектов, и если я использую функцию clear(). Могу ли я быть уверенным, что память была выпущена? Например: tempObject obj1; tempObject obj2; vector<tempObject> te...
05 мая '12 в 18:55