Вопросы по теме 'virtual-destructor'

Когда не следует использовать виртуальные деструкторы?
Есть ли веская причина не объявлять виртуальный деструктор для класса? В каких случаях лучше не писать?
29846 просмотров

Должен ли каждый класс иметь виртуальный деструктор?
Java и C # поддерживают понятие классов, которые нельзя использовать в качестве базовых классов с ключевыми словами final и sealed . В C ++, однако, нет хорошего способа предотвратить создание класса, что ставит автора класса перед дилеммой:...
46410 просмотров
schedule 15.11.2022

виртуальный деструктор не работает с массивом
Я нашел этот код на веб-сайте . #include <iostream> using namespace std; struct Base { Base() { cout << "Base" << " "; } virtual ~Base() { cout << "~Base" << endl; } int i; }; struct Der : public Base...
662 просмотров

Возможна ли утечка памяти без виртуального деструктора?
#include <iostream> using namespace std; class base { int a; public: base() {a =0;} }; class derv :public base { int b; public: derv() {b =1;} }; int main() { base *pb = new derv(); delete pb; } У меня нет...
4456 просмотров

Получение классов без виртуального деструктора в стороннем программном обеспечении
Мне предоставляется сторонняя библиотека с ее заголовком для использования. Теперь в этой библиотеке есть класс Base. Проблема с этим классом в том, что у него нет виртуального деструктора. Теперь, поскольку у меня нет стороннего кода, я не могу...
373 просмотров
schedule 12.05.2022

Есть ли вред от виртуального деструктора без виртуального метода?
Во время моего проектирования иногда у меня возникает ситуация, когда я добавляю/или удаляю виртуальные методы. Эмпирическое правило, которое я знаю, заключается в том, что у меня должен быть виртуальный деструктор, как только у меня будут...
245 просмотров
schedule 09.11.2023

Правильно ли работает удаление с полиморфизмом?
BaseClass * p = new DerivedClass(); delete p; Я знаю, что вторая строка вызовет деструктор базового класса, если у него нет виртуального деструктора, и деструктора производного класса, если он есть, но delete должным образом освободит память...
3206 просмотров
schedule 06.04.2022

Отсутствие виртуального деструктора, когда единственный производный класс не добавляет дополнительных переменных
У меня есть класс Literal, который на самом деле является оболочкой для (const int). Я хочу иметь второй класс PositiveLiteral, который наследуется от Literal, но имеет конструктор, утверждающий, что его значение положительное. class Literal {...
308 просмотров

C++: чистый виртуальный деструктор в абстрактном классе с членами
Я только начал изучать С++ и наткнулся на эту проблему. Я написал этот абстрактный класс с чистым виртуальным деструктором: #ifndef ANIMAL #define ANIMAL #include <string> using namespace std; class Animal { public: Animal();...
1814 просмотров

Что произойдет, если я изменю деструктор одного базового класса с невиртуального на виртуальный?
Я столкнулся с базовым классом, деструктор которого не является виртуальным, хотя в базовом классе есть 1 виртуальная функция fv() . Этот базовый класс также имеет множество подклассов. Многие из этих подклассов определяют свои собственные fv() ....
1778 просмотров

Что происходит при удалении полиморфного объекта без виртуального деструктора?
В следующем примере b  – это тип полиморфного указателя, статический тип которого — Base* , а динамический  тип — Derived* . struct Base { virtual void f(); }; struct Derived : Base { }; int main() { Base *b = new Derived(); //...
773 просмотров

Как компилятор обрабатывает вызовы деструктора базового класса в производном деструкторе?
Просто из любопытства я попытался сделать что-то вроде приведенного ниже примера, чтобы увидеть, выдает ли мне компилятор предупреждение или около того вместо вызова бесконечного цикла, который заканчивается переполнением стека. Я подумал, может...
104 просмотров
schedule 14.10.2022

Что мне нужно, чтобы вернуть объект с элементом unique_ptr?
Допустим, у меня есть этот объект: struct foo { std::unique_ptr<int> mem; virtual ~foo() = default; }; Я больше не могу возвращать объект foo , созданный в функции: foo make_foo() { foo result; result.mem =...
544 просмотров