Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Конструктор/Деструктор - когда вызывать?  (Прочитано 39691 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Xeysan
Гость
« Ответ #30 : 17-11-2003 07:54 » new

Цитата
Попробуй так  
class A {
public:
void f() { std::cout<<"Hello"; }
};
...
((A*)0)->f();

А я и не утверждал, что это пример для подражания, и юные хакеры должны делать так.

Цитата
Сразу скажу, что this там используется и в ф-цию передается- он просто NULL равен.

Ты же не пытаешься получить доступ к нестатическим членам класса, поэтому и

работает.

Я это, собственно, и имел в виду:
Код:
((A*)0)->fun();
004312BE  xor         ecx,ecx ; this ptr
004312C0  call        A::fun (42EF09h)
...
@ILT+7940(?fun@A@@QAEXXZ):
0042EF09  jmp         A::fun (4312F0h)
...
void fun() {
004312F0  push        ebp 
004312F1  mov         ebp,esp
004312F3  sub         esp,0CCh
004312F9  push        ebx 
004312FA  push        esi 
004312FB  push        edi 
004312FC  push        ecx ; Save this
004312FD  lea         edi,[ebp-0CCh]
00431303  mov         ecx,33h
00431308  mov         eax,0CCCCCCCCh
0043130D  rep stos    dword ptr [edi]
0043130F  pop         ecx ; Restore this
00431310  mov         dword ptr [ebp-8],ecx
std::cout << "Hello!";
00431313  push        offset string "Hello!" (48D0B8h)
00431318  push        offset std::cout (49B254h)
0043131D  call        std::operator<< (42EE7Dh)
00431322  add         esp,8
}
00431325  pop         edi 
00431326  pop         esi 
00431327  pop         ebx 
00431328  add         esp,0CCh
0043132E  cmp         ebp,esp
00431330  call        @ILT+6200(__RTC_CheckEsp) (42E83Dh)
00431335  mov         esp,ebp
00431337  pop         ebp 
00431338  ret             
Цитата

Так,NetRaider в тебя стандартом запустил уже. А я в тебя кидаю книжкой B. Stroustrup "The design and evolution of C++", но тебе повезло- она нетолстая.

Я не против, я книги люблю. Просто, "The design and evolution of C++" я не читал, и пример выдумал сам...но это я скоро исправлю Улыбаюсь
« Последнее редактирование: 20-11-2007 19:32 от Алексей1153++ » Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines