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

В языке программирования C ++ оператор удаления вызывает деструктор данного аргумента и возвращает память, выделенную new, обратно в кучу.

1334
Удаление элементов массива в JavaScript - удаление против сращивания

В чем разница между использованием в deleteоператор на элементе массива в отличие от использования в Array.spliceметод ? Например: myArray = ['a', 'b', 'c', 'd']; delete myArray[1]; // or myArray.splice (1, 1); Зачем даже метод сращивания, если я могу удалять элементы массива, как я могу с...

232
Можно ли удалить это?

Разрешено ли, delete this;если оператор delete является последним оператором, который будет выполнен в этом экземпляре класса? Конечно, я уверен, что объект, представленный this-pointer, newсоздан. Я думаю о чем-то вроде этого: void SomeModule::doStuff() { // in the controller, "this" object of...

165
Вызывает ли удаление указатель на подкласс деструктор базового класса?

У меня есть, class Aкоторый использует выделение кучи памяти для одного из своих полей. Класс A создается и сохраняется как поле указателя в другом классе ( class B. Когда я закончу с объектом класса B, я вызываю delete, который, я полагаю, вызывает деструктор ... Но вызывает ли это и деструктор...

136
Как delete [] знает, что это массив?

Хорошо, я думаю, что мы все согласны с тем, что то, что происходит со следующим кодом, не определено, в зависимости от того, что передано, void deleteForMe(int* pointer) { delete[] pointer; } Указатель может быть разного рода, поэтому выполнение безусловного delete[]для него не определено. Тем не...

130
Что Visual Studio делает с удаленным указателем и почему?

В книге на C ++, которую я читал, говорится, что когда указатель удаляется с помощью deleteоператора, память в том месте, на которое он указывает, «освобождается» и может быть перезаписана. В нем также указано, что указатель будет продолжать указывать на то же место, пока он не будет переназначен...

127
Почему не удалить указатель на NULL?

Мне всегда было интересно, почему автоматическая установка указателя на NULL после удаления не входит в стандарт. Если об этом позаботиться, то многих сбоев из-за неправильного указателя не произойдет. Но, сказав это, я могу придумать пару причин, по которым стандарт ограничил бы это:...

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

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

89
Удаление указателя на const (T const *)

У меня основной вопрос относительно константных указателей. Мне не разрешено вызывать какие-либо неконстантные функции-члены с использованием константного указателя. Однако мне разрешено делать это с указателем const: delete p; Это вызовет деструктор класса, который по сути является неконстантным...

87
Как вы «перераспределяете» в C ++?

Как я могу reallocна C ++? В языке вроде бы отсутствует - есть newи deleteно нетresize ! Мне это нужно, потому что по мере того, как моя программа читает больше данных, мне нужно перераспределить буфер для его хранения. Я не думаю, что deleteиспользовать старый указатель и newиспользовать новый,...

85
Безопасно ли удалить nullptr в с ++ 0x?

В c++03ней довольно ясно , что удаление пустого указателя не имеет никакого эффекта. В самом деле, это прямо указано в §5.3.5/2том, что: В любом случае, если значением операнда удаления является нулевой указатель, операция не имеет никакого эффекта. Тем не менее, в текущем проекте для c++0xэтого...

17
Оператор new () ведет себя по-разному, когда оператор delete () удаляется в зависимости от существования конструктора по умолчанию

Создание нового объекта класса C с оператором new () выдает здесь ошибку: class C { public: C() {} virtual ~C() {} void operator delete(void*) = delete; }; int main() { C* c = new C; } с C2280: 'void C::operator delete(void *)': function was explicitly deleted Но когда я заменяю C() {} с C() =...

16
Почему деструктор не вызывается в операторе удаления?

Я пытался вызвать ::deleteкласс в operator deleteэтом. Но деструктор не называется. Я определил класс MyClass, operator deleteкоторый был перегружен. Глобал operator deleteтакже перегружен. Перегруженный operator deleteиз MyClassбудет вызывать перегруженный глобальный operator delete. class MyClass...