Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает.
Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает. К нему по прежнему можно обратиться и вывести значения xy. При этом по завершению работы программы, в консоль выводится "destruct" второй раз.
как правильно уничтожить объект?
получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?
Каким образом происходит передача информации в [mainx] что функция printx() существует?
objdump -dr mainx.o
...
0000000000000000 <main>:
0: 55 push %rbp
...
3a: 89 c7 mov %eax,%edi
3c: e8 00 00 00 00 callq 41 <main+0x41>
3d: R_X86_64_PLT32 _Z6printxi-0x4
41: b8 00 00 00 00 mov $0x0,%eax
46: c9 leaveq
47: c3 retq
...
readelf -a mainx.o
...
Relocation section '.rela.text' at offset 0x580 contains 12 entries:
Offset Info Type Sym. Value Sym. Name + Addend
...
00000000003d 001400000004 R_X86_64_PLT32 0000000000000000 _Z6printxi - 4
...
Symbol table '.symtab' contains 25 entries:
Num: Value Size Type Bind Vis Ndx Name
...
20: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z6printxi
...
readelf -a printx.cpp
...
Symbol table '.symtab' contains 24 entries:
Num: Value Size Type Bind Vis Ndx Name
...
14: 0000000000000000 75 FUNC GLOBAL DEFAULT 1 _Z6printxi
...
Как это решается в других проектах?
#include <stdio.h>
class A
{
public:
virtual ~A()
{
}
};
class B
{
public:
virtual ~B()
{
}
};
class C
{
public:
virtual void dump() = 0;
virtual ~C()
{
}
};
class D: public A, public C
{
public:
virtual void dump()
{
printf("D: %p\n", this);
}
};
class E: public B, public C
{
public:
virtual void dump()
{
printf("E: %p\n", this);
}
};
void f(void *p)
{
C *pc1 = dynamic_cast<C*>((A*)p);
C *pc2 = dynamic_cast<C*>((B*)p);
C *pc3 = dynamic_cast<C*>((C*)p);
if (pc1)
pc1->dump();
else if (pc2)
pc2->dump();
else if (pc3)
pc3->dump();
}
int main()
{
D d;
E e;
printf("d: %p, e: %p\n", &d, &e);
A *pa = &d;
f(pa);
B *pb = &e;
f(pb);
C *pc1 = &d;
f(pc1);
C *pc2 = &e;
f(pc2);
D *pd = &d;
f(pd);
E *pe = &e;
f(pe);
return 0;
}
cpp файлtemplate <typename T> Tree<T>::Tree() { }
Tree<int>
в каком-то другом файле?Если переношу реализацию конструктора и деструктора в заголовок - все работает.
unresolved external symbol "public: __thiscall tinyxml2::XMLDocument::XMLDocument(bool,enum tinyxml2::Whitespace)" referenced in function "public: __thiscall Primes::Primes(void)"
как это исправить
Как поймать нажатие CTRL+ALT+DEL?
secure attention sequence
. Его обрабатывает winlogon или загруженная в него GINA. Читать начиная отсюда.Есть какие-нибудь варианты?
теперь нужно выводить текст "Ожидание изображения', но как?