Грязный хук.

Провёл не большой анализ по одному коду, и выянил не которые особенности,

о которых не пишут в книгах о языке C++.

Это я узнал из книги INside COM.

Также помню не в тему спор завёл где то на форме, про виртуальный деструктор и

где его надо прописывать.

Правильнее и безопаснее прописывать конечно везде, если не брать концепцию COM.

C++Выделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#include <iostream.h>
class Abstract {
public:
/Абстрактному классу не нужен виртуальный деструктор потому что Release может действовать и без него,
/
virtual long Release() = 0;
};
class MyClass: public Abstract  {
public:
    MyClass(){ cout<<"Create MyClassn"; }
    virtual ~MyClass() {cout<<"Destroyn"; }
    
virtual long Release(){
/подразумивается как delete obj, верно ли я предполагаю, поэтому деструктор вызывается с нужного места  иерархии: тоесть с производного класса.
/  delete this;                
             return 0;
    }
};
 
 
int main(){
MyClass  obj = new MyClass;
Abstract aobj = obj;
aobj->Release();
//delete aobj; не сработает так как в базовом нет виртуального деструктора.
return 0;
}

Тогда получается COM компонент явно через delete( к указателю базового класса) не удалить,

так как в базовом классе отстутсвует виртуальный деструктор.

Я то знаю почему надо что бы delete не работало, мне это известно.

Я просто хочу узнать у более опытных прогеров верно ли мое предположение о том как действует

Release():

Или применяется ещё что то.

Ответьте пожалейста, заранее благодарен.