Запитання з тегом «delete-operator»

У мові програмування C ++ оператор delete викликає деструктор заданого аргументу і повертає пам'ять, виділену new, назад до купи.

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



10
Чи дозволено видалити це?
Чи дозволено, delete this;якщо оператор delete є останнім оператором, який буде виконаний на цьому екземплярі класу? Звичайно, я впевнений, що об'єкт, представлений thisточкою вказівника, newстворений ly. Я думаю про щось подібне: void SomeModule::doStuff() { // in the controller, "this" object of SomeModule is the "current module" // now, if I …

11
Чи видаляє вказівник на підклас виклик деструктора базового класу?
У мене є an, class Aякий використовує розподіл пам'яті купи для одного з його полів. Клас А інстанціюється і зберігається як поле вказівника в іншому класі ( class B. Коли я закінчую з об'єктом класу B, я дзвоню delete, який, як я вважаю, називає деструктором ... Але це також називає …

16
Як delete [] знає, що це масив?
Добре, я думаю, що всі ми згодні з тим, що те, що відбувається із наступним кодом, не визначено, залежно від того, що передано, void deleteForMe(int* pointer) { delete[] pointer; } Вказівник може бути різними різними речами, і тому виконання безумовного delete[]на ньому не визначено. Однак припустимо, що ми дійсно передаємо …


6
Що робить Visual Studio зі видаленим покажчиком і чому?
Книга C ++, яку я читав, говорить про те, що при видаленні вказівника за допомогою deleteоператора пам'ять у місці, на яке він вказує, "звільняється", і його можна перезаписати. Тут також зазначено, що покажчик продовжуватиме вказувати на те саме місце, поки не буде призначений або встановлений на нього NULL. Однак у …

12
Чому не видалити встановити вказівник на NULL?
Мені завжди було цікаво, чому автоматичне встановлення покажчика на NULL після видалення не є частиною стандарту. Якщо це вирішиться, тоді багато збоїв через недійсний покажчик не відбудуться. Але сказавши, що я можу придумати кілька причин, чому стандарт обмежив би це: Продуктивність: Додаткова інструкція може уповільнити deleteпродуктивність. Можливо, через constпокажчики. Тоді …

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

5
Видалення покажчика на const (T const *)
У мене є основне питання стосовно покажчиків const. Мені не дозволено викликати будь-які функції, що не є учасниками const, за допомогою вказівника const. Однак мені дозволено це робити на покажчику const: delete p; Це викличе деструктор класу, який по суті є неконстентним 'методом'. Чому це дозволено? Чи просто для підтримки …

5
Як ви «переробите» на C ++?
Як я можу reallocв C ++? Здається, це відсутнє в мові - є newі deleteале ні resize! Мені це потрібно, оскільки, оскільки моя програма читає більше даних, мені потрібно перерозподілити буфер, щоб утримувати їх. Я не вважаю правильним варіантом deleteвведення старого вказівника та newстворення нового, більшого.

2
Чи все ще безпечно видаляти nullptr у c ++ 0x?
Тут c++03цілком зрозуміло, що видалення нульового вказівника ніяк не впливає. Справді, прямо зазначено, §5.3.5/2що: В будь-якому варіанті, якщо значення операнда delete є нульовим покажчиком, операція не впливає. Тим НЕ менше, в поточному проекті для 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 size) …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.