Информация об изменениях

Сообщение Re[4]: Множественное наследование интерфейсов от 12.06.2018 22:02

Изменено 13.06.2018 4:55 AlexGin

Re[4]: Множественное наследование интерфейсов
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Наследование только от интерфейсов:

МР>
МР>class SomeClass : public Interface1,    // интерфейс
МР>                  public Interface2,    // интерфейс
МР>                  ...
МР>                  public InterfaceN     // интерфейс
МР>{
МР>public:
МР>   ~SomeClass();
МР>//...
МР>};
МР>


МР>~SomeClass() переопределяет сразу все деструкторы интерфейсов?


У класса может быть только один деструктор!
В этом деструкторе следует очистить все ресурсы, используемые в этом классе и требующие очистки.

МР>Для удаления объекта SomeClass можно любой интерфейс использовать? Например, так можно?


МР>
МР>std::unique_ptr<Interface2> obj(new SomeClass()); // удаляться будет через интерфейс Interface2
МР>


Да, если в Interface2 определён виртуальный деструктор.
Если же там вирт/деструктора нет, то очистки ресурсов не будет
Re[4]: Множественное наследование интерфейсов
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Наследование только от интерфейсов:

МР>
МР>class SomeClass : public Interface1,    // интерфейс
МР>                  public Interface2,    // интерфейс
МР>                  ...
МР>                  public InterfaceN     // интерфейс
МР>{
МР>public:
МР>   ~SomeClass();
МР>//...
МР>};
МР>


МР>~SomeClass() переопределяет сразу все деструкторы интерфейсов?


У класса может быть только один деструктор!
Деструктор — не принимает никаких аргументов.
В деструкторе следует очистить все ресурсы, используемые в объекте данного класса и требующие очистки.

МР>Для удаления объекта SomeClass можно любой интерфейс использовать? Например, так можно?


МР>
МР>std::unique_ptr<Interface2> obj(new SomeClass()); // удаляться будет через интерфейс Interface2
МР>


Да, если в Interface2 определён виртуальный деструктор.
Если же там вирт/деструктора нет, то очистки ресурсов не будет