Описание тега destructor

Специальный метод в объектно-ориентированном программировании, который вызывается при уничтожении объекта.
3 ответа

Можно ли инвертировать порядок уничтожения?

У меня есть базовый класс, который реализует много основных функций, и ему нужно некоторое "хранилище" (блок памяти), которое должно быть предоставлено классом, который его наследует (или пользователем). class Base { public: Base(void* storage, size…
19 окт '15 в 21:12
5 ответов

Удалить это? Что это делает?

Учитывая следующее: #include <iostream> using namespace std; class A { public: void func() {delete this;} A() : x(5) {cout << "ctor A" << endl;} ~A() {cout << "dtor A" << endl;} int x; }; int main() { A a; cout <<…
4 ответа

C++ деструктор не вызывается, в зависимости от порядка компоновки

Я столкнулся с этой проблемой в своем приложении после проверки его на утечки памяти и обнаружил, что некоторые из моих классов вообще не уничтожаются. Приведенный ниже код разделен на 3 файла, предполагается, что он реализует шаблон, называемый pim…
07 сен '12 в 17:51
1 ответ

Почему деструктор виртуального класса автоматически не добавляется в vtable?

Когда виртуальный класс B наследуется от виртуального базового класса A, если только явно не объявлено виртуальное деструктор в A и B, деструктор B в vtable будет указывать на деструктор A. Зачем? Почему vtable деструктор B не указывает автоматическ…
14 апр '18 в 15:46
1 ответ

Является ли пользовательское средство удаления для std::unique_ptr допустимым местом для ручного вызова деструктора?

У меня есть очень базовая реализация отражения, которая включает в себя Type класс, который создает объект для класса, который он описывает. Разобравшись до соответствующих частей, это выглядит так: Type.h: class Plugin; // forward declaration typed…
14 янв '14 в 10:28
2 ответа

Проблема удаления отдельного элемента вектора в C++

#include <vector> #include <iostream> #include <memory> using namespace std; class Test { public: Test (){ cout<<"Const\n"; } ~Test (){ cout<<"Dest\n"; } }; int main( ) { vector<Test *> tVec; tVec.push_back(new Te…
08 апр '16 в 12:41
2 ответа

Шаблон для выполнения автоматической перезаписи памяти при уничтожении

Это общий шаблон использования шаблонов для принудительной инициализации компилятором значений типов примитивов / POD ( /questions/23035388/initsializirujte-vse-peremennyie-opredelennogo-tipa-dlya-opredelennogo-znacheniya-po-umolchaniyu-v-c/23035404…
04 сен '12 в 07:21
4 ответа

Область действия объекта в массиве

Предположим, у вас есть массив объектов в C++, и вы удаляете один из объектов из массива. Когда вызывается деструктор этого объекта? Поскольку в C++ нет автоматического сбора мусора, было бы странно, если бы деструктор вызывался сразу после удаления…
24 авг '11 в 18:59
1 ответ

Деструктор, возвращающий временный объект

Я не понимаю, в чем проблема при возврате временного объекта. Если я не использую деструктор, то все в порядке. Но с деструктором это создает проблему. Коэффициенты для полинома 1 и 2 печатаются правильно. Полином 3 также. Но после сложения coeff[1]…
17 сен '15 в 20:00
1 ответ

Почему std::vector::emplace вызывает деструктор без вызова конструктора копирования?

Я храню предметы внутри std::vectorи я хочу, чтобы как можно больше не вызывать деструктор.Я заменил конструктор копирования и назначения на перемещения: class Object { Object(const Object&) = delete; Object(Object&&); Object& operat…
29 апр '16 в 01:34
1 ответ

Поток, созданный статическим объектом, удален до DTor?

У меня есть следующие классы в моем коде. Другими словами, существует статический объект (синглетон), который создает поток в CTor, и когда вызывается его DTor, ему необходимо выполнить некоторую работу в контексте этого потока (DTor ставит некоторы…
30 мар '17 в 07:02
2 ответа

Удаление пользовательского двусвязного списка

Свойство списка: один указатель указывает на следующий узел, а другой - на любой произвольный узел в списке. Состав struct node { int val; node* link[2]; node(int x); ~node(); }; node :: node(int x) { val = x; link[0] = NULL; link[1] = NULL; } node …
07 июл '14 в 11:17
3 ответа

shared_ptr магия:)

Мистер Лидстрём и я поссорились:) Г-н Лидстрём утверждает, что конструкция shared_ptr<Base> p(new Derived); не требует, чтобы у Base был виртуальный деструктор: Армен Цирунян: "Действительно? Будет ли корректно очищен shared_ptr? Не могли бы …
10 окт '10 в 09:41
1 ответ

Ошибка отладочного утверждения: dbgheap.cpp и dbgdell.cpp

У меня какая-то проблема с утечкой памяти. У меня было это в более ранних строках, но я исправил это, написав конструктор присваивания копии. Но проблема на delete newB линия. Когда я закомментирую эту строку, появляется другая ошибка. Как вы думает…
07 апр '13 в 16:06
2 ответа

Форвард декларации и деструкторы

Представьте себе простой сегмент класса, который является его конструктором, это пара объектов из класса: class Point ; class LineSegment { public: LineSegment(Point* P1, Point* P2); ~LineSegment(); } ; Вопрос в деструкторе: нужно ли сначала удалять…
06 июн '12 в 08:50
3 ответа

Что такое нетривиальный деструктор в C++?

Я читал это, в котором упоминается, что деструкторы тривиальны и нетривиальны. Класс имеет нетривиальный деструктор, если у него есть явно определенный деструктор или если у него есть объект-член или базовый класс, у которого есть нетривиальный дест…
19 ноя '11 в 00:32
4 ответа

Разрушитель вызывается дважды, а конструктор копирования или оператор присваивания не вызывают

У меня есть класс: class A { public: A() { std::cout << "Constructor called" << std::endl; } ~A() { std::cout << "Destructor called" << std::endl; } A(const A& another) { std::cout << "Copy constructor called" <&…
31 май '11 в 18:42
4 ответа

Скопируйте конструктор, деструктор и оператор присваивания. Когда они нам не нужны?

Я знаю эмпирическое правило C++, когда вы добавляете cctor, dtor или op = в ваш класс, вам нужно добавить и два других, чтобы заставить ваш класс работать должным образом при любых обстоятельствах. Есть ли случаи, когда вам не нужно предоставлять вс…
2 ответа

Нужно ли уничтожать семафоры?

У меня есть класс, работающий с (не статичными) семафорами. В деструкторе этого класса я освобождаю динамически выделяемую память. Объекты класса не должны быть "разрушены", пока мы wait для семафора. Мне все еще нужно использовать sem_destroy в дес…
25 апр '14 в 09:09
2 ответа

Относительно поведения Struct Constructor и Destructor - C++

Я не понимаю, почему вывод этой программы следующий. Почему нет ошибки компиляции? Я думал, что при попытке построить B компилятор не найдет функцию с именем foo() и сообщит об ошибке. #include <iostream> using namespace std; struct A{ int a; …