- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
#include <windows.h>
struct io
{
io()
{
SetConsoleTitle(__FUNCSIG__);
}
~io()
{
DebugBreak();
}
} io_obj;
int main()
{
}
typedef void(fn_t)();
#pragma comment(linker, "/merge:.CRT=.rdata")
#pragma data_seg(".CRT$XCA")
extern "C" fn_t * start[] = {0};
#pragma data_seg(".CRT$XCZ")
extern "C" fn_t * finish[] = {0};
#pragma data_seg()
void call_dtors();
extern "C" void _initterm()
{
fn_t **p = start, **q = finish;
while (p < q)
{
if (*p)
(*p)();
++p;
}
main();
call_dtors();
}
fn_t * dtors[999];
int c_dtors;
void call_dtors()
{
while (c_dtors--)
dtors[c_dtors]();
}
extern "C" int atexit(void (__cdecl *func )( void ))
{
dtors[c_dtors++] = func;
return !"unspecified";
}
struct node{
//свойства
...
//указатель на след звено
node *pNext;
node(){pNext=NULL;//и инициализация других свойств};
~node(){delete pNext;} //цепная реакция
}
(*(node *pHead=new(node)).pNext=new(node);
delete pHead;
Если посмотреть на деструктор, то можно понять принцип. Пример туповат, но все же, надеюсь, ответил на вопрос.
Да и вообще странный вопрос.
Кстати, в чём?
Да, и какие это такие особенности с нахождением "указателя на vtable"?
class foo { int goo; } - goo - private
А уж именно области видимости тут вообще никак ни к селу ни к городу.
кажется срач начинается, кажется срач начинается
диарея!
Надеюсь, по традиции кто-нибудь добрый и большой кинет иллюстрацию))