Форум программистов, компьютерный форум, киберфорум
Наши страницы

Грязный хук. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Классы и функции http://www.cyberforum.ru/cpp-beginners/thread100156.html
Вопрос по поводу "идеологии" написания классов. Как лучше писать реализации? Есть ли смысл создавать функции, которые по сути аналогичны предназначению метода класса и просто вызывать их из...
C++ 5 программ. Срочно 1.Написать программу номер дня недели,название дня недели или сообщение об ошибке ,если введены неверные данные 2.написать программу которая выводит таблицу квадратов первых 10 целых полодительных... http://www.cyberforum.ru/cpp-beginners/thread100133.html
Метод Гаусса для решения СЛАУ с использованием одномерного массива C++
Доброго всем времени суток. У меня есть прога для двумерного массива #include <stdio.h> #include <iostream> #include <conio.h> using namespace std; void f(double an, double bn,int m) { ...
Сумма квадратов цифр любого числа в итоге равняется числу из интервала [1,9]. C++
Помогите решить с объяснениями. Сумма квадратов цифр любого числа в итоге равняется числу из интервала . Вывести количество и сами числа, сумма цифр которых равны либо 1, либо 4, из интервала от 1...
C++ В вещественной матрице размером NxN найти максимальный и минимальный элементы. http://www.cyberforum.ru/cpp-beginners/thread100116.html
Помогите решить с объяснениями. В вещественной матрице размером NxN найти максимальный и минимальный элементы. Переставить строки, в которых они находятся. Если они находятся в одной строке,...
C++ вычисление простых чисел в книге написана программа, про вычисление простых чисел. #include <iostream> #include <math.h> using namespace std; int main() { int n; bool prostoe = true; double koren =... подробнее

Показать сообщение отдельно
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014

Грязный хук. - C++

01.03.2010, 11:17. Просмотров 1830. Ответов 32
Метки (Все метки)

Провёл не большой анализ по одному коду, и выянил не которые особенности,
о которых не пишут в книгах о языке 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 MyClass\n"; }
    virtual ~MyClass() {cout<<"Destroy\n"; }
    
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():
/*подразумивается как delete obj, верно ли я предполагаю, поэтому деструктор вызывается с нужного места иерархии: тоесть с производного класса.
*/
Или применяется ещё что то.
Ответьте пожалейста, заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru