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

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

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



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

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

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


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

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

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

5
Удаление указателя на const (T const *)
У меня основной вопрос относительно константных указателей. Мне не разрешено вызывать какие-либо неконстантные функции-члены с использованием константного указателя. Однако мне разрешено делать это с указателем const: delete p; Это вызовет деструктор класса, который по сути является неконстантным «методом». Почему это разрешено? Просто чтобы поддержать это: delete this; Или есть какая-то …

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

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

1
Оператор 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 Но когда я заменяю …

3
Почему деструктор не вызывается в операторе удаления?
Я пытался вызвать ::deleteкласс в operator deleteэтом. Но деструктор не называется. Я определил класс MyClass, operator deleteкоторый был перегружен. Глобал operator deleteтакже перегружен. Перегруженный operator deleteиз MyClassбудет вызывать перегруженный глобальный operator delete. class MyClass { public: MyClass() { printf("Constructing MyClass...\n"); } virtual ~MyClass() { printf("Destroying MyClass...\n"); } void* operator new(size_t …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.