Сообщение Re[2]: нужно ли декларировать виртуальный деструктор от 27.04.2024 23:42
Изменено 27.04.2024 23:44 rg45
Re[2]: нужно ли декларировать виртуальный деструктор
Здравствуйте, fk0, Вы писали:
fk0> Его и не получится не декларировать, если он нужен в конкретном наследнике.
Получится. Если деструктор базового класса объявлен виртуальным, то все деструкторы базовых классов также будут виртуальными, независимо от того, как они объявлены:
http://coliru.stacked-crooked.com/a/dfcf2add921ddd7b
fk0> Его и не получится не декларировать, если он нужен в конкретном наследнике.
Получится. Если деструктор базового класса объявлен виртуальным, то все деструкторы базовых классов также будут виртуальными, независимо от того, как они объявлены:
http://coliru.stacked-crooked.com/a/dfcf2add921ddd7b
#include <iostream>
#include <memory>
class Base
{
public:
virtual ~Base(){ std::cout << "~Base()" << std::endl; }
};
class Derived : public Base
{
public:
/*virtual*/ ~Derived(){ std::cout << "~Derived()" << std::endl; } /*override*/
};
int main()
{
std::shared_ptr<Base> p = std::make_shared<Derived>();
}
Re[2]: нужно ли декларировать виртуальный деструктор
Здравствуйте, fk0, Вы писали:
fk0> Его и не получится не декларировать, если он нужен в конкретном наследнике.
Получится. Если деструктор базового класса объявлен виртуальным, то все деструкторы базовых классов также будут виртуальными, независимо от того, как они объявлены:
http://coliru.stacked-crooked.com/a/dfcf2add921ddd7b
fk0> Его и не получится не декларировать, если он нужен в конкретном наследнике.
Получится. Если деструктор базового класса объявлен виртуальным, то все деструкторы базовых классов также будут виртуальными, независимо от того, как они объявлены:
http://coliru.stacked-crooked.com/a/dfcf2add921ddd7b
#include <iostream>
#include <memory>
class Base
{
public:
virtual ~Base(){ std::cout << "~Base()" << std::endl; }
};
class Derived : public Base
{
public:
/*virtual*/ ~Derived(){ std::cout << "~Derived()" << std::endl; } /*override*/
};
int main()
{
std::shared_ptr<Base> p = std::make_shared<Derived>();
}
g++ -std=c++20 -O2 -Wall -Wno-non-template-friend -pedantic -pthread main.cpp && ./a.out
~Derived()
~Base()