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

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

Каков правильный способ освобождения std::vector указателей в С++?

Я искал StackOverflow, но не смог найти ответ на этот вопрос. Предположим, что у меня есть std::vector<Day *> vector_day - то есть - вектор указателей на объект Day. Теперь я push_back to vector_day много элементов: vector_day.push_back(new ...
27 июл. '10 в 15:04
4

Легальность использования оператора delete на указателе, полученном из размещения new

Я уверен, что этот код должен быть незаконным, поскольку он явно не работает, но, похоже, он разрешен С++ 0x FCD. class X { /* ... */}; void* raw = malloc(sizeof (X)); X* p = new (raw) X(); // according to the standard, the RHS is a placement-new ex...
11 дек. '10 в 18:24
1

Почему оператор удаления требуется для виртуальных деструкторов

В автономном контексте (без стандартных библиотек, например, при разработке операционной системы) с использованием g++ возникает следующее явление: class Base { public: virtual ~Base() {} }; class Derived : public Base { public: ~Derived() {...
28 июл. '15 в 20:32
1

Каковы некоторые применения for = delete?

Ранее сегодня я спросил вопрос, который привел к другому: когда следует использовать =delete? Я не думаю, что есть статья, посвященная исключительно =delete на SO, поэтому я просмотрел ее в книге под названием "Язык программирования С++". Я приведу ...
17 сент. '13 в 5:15
1

Удалить vs operator delete (и указатель void)

Разве delete ptr отличается от operator delete(ptr) только тем, что delete вызывает ptr деструктор? Или, другими словами, delete ptr сначала вызывает деструктор ptr, а затем operator delete(ptr) для освобождения выделенной памяти? Тогда delete ptr т...
13 мая '12 в 17:18
3

Является ли вызов delete по результату удаления места размещения, который использовал новый оператор?

Если я делаю struct MyStruct { ~MyStruct() { } }; void *buffer = operator new(1024); MyStruct *p = new(buffer) MyStruct(); // ... delete p; // <---------- is this okay? является delete, гарантированным как для вызова ~MyStruct(), так и...
23 мая '13 в 23:57
1

Почему оператор С++ new/delete/variant не должен быть в файлах заголовков?

Может кто-нибудь объяснить природу этой ошибки компиляции С++? Я разбираюсь/узнаю о перегрузке глобальных операторов new, delete и их вариантах. Я прочитал пару статьи on , но я не мог " t найти тот, который, кажется, обращается именно к этому. ...
05 сент. '16 в 5:13
4

Написание функции, чтобы освободить указатель и присвоить ему NULL

Мне было предложено это в недавнем интервью, в основном написав функцию, чтобы объединить функциональные возможности бесплатного и назначить нуль. Я ответил следующим образом: void main() { int *ptr; ptr = new int; ptr = newdelete(...
02 июл. '10 в 7:06
6

Каков правильный способ удаления char **

У меня есть char **, в основном массив строк, который мне нужно удалить. Каков правильный способ сделать это, чтобы все указатели были очищены?
13 мая '11 в 9:10
1

Компиляция С++ без оператора delete

Я пишу программу на С++ для встроенного устройства, и я хочу скомпилировать ее без libstdС++, исключений и динамического выделения памяти. Пример программы: #include <stdio.h> class A { public: virtual ~A() {} virtual void Foo() = 0;...
22 авг. '16 в 16:47
2

Замена удаления на С++, missinformation

Я пытаюсь (и решил) проблему с проблемами выравнивания по 16 байт с классом, который содержит оптимизированные члены SSE. Но то, что прослушивает меня, - это большая часть примеров, которые я нашел в Интернете, содержит строку кода, которая для меня ...
25 июл. '12 в 8:41
4

Удаление вектора указателей

Мне нужно создать указатели экземпляров класса, и во время компиляции программа не знает, сколько указателей я создам. Для удаления я рассматривал возможность хранения указателей в векторе, а затем их удаление один за другим. Будет ли использование и...
11 апр. '13 в 7:10
3

Если я пишу операторы new и delete для класса, мне нужно написать все их перегрузки?

На странице С++ Reference перечислены 8 перегрузок по классам для глобальных новых операторов. Четыре из них были добавлены для версии С++ версии 2017 года. Функции распределения для класса void* T::operator new ( std::size_t count ); void* T::...
06 авг. '17 в 20:38
4

Почему в С++ есть delete []?

Почему существует delete[]? По моему мнению, он должен вести себя по-разному для массивов. Однако почему это действительно существует? Там только бесплатно в C и нет free_array. Также в синтаксисе единственное различие между delete var и delete []va...
12 сент. '10 в 9:26
3

Объектно-ориентированное самоубийство или удалить его;

Следующий код, скомпилированный с MSVC9.0, запускает и выводит Деструктор четыре раза, что логично. #include <iostream> class SomeClass { public: void CommitSuicide() { delete this; } void Reincarnate() { this->...
18 окт. '10 в 13:29