Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main:
- push rbx
- # allocate space for a C on the stack
- sub rsp, 16
- # initialise c's vtable (note: only one)
- mov QWORD PTR [rsp+8], OFFSET FLAT:vtable for C+16
- # use c
- lea rdi, [rsp+8]
- call do_something(C&)
- # destruction sequence through virtual destructor
- mov QWORD PTR [rsp+8], OFFSET FLAT:vtable for B+16
- lea rdi, [rsp+8]
- call A::~A() [base object destructor]
- add rsp, 16
- xor eax, eax
- pop rbx
- ret
- mov rbx, rax
- jmp .L10
- struct A
- {
- virtual void foo() = 0;
- virtual ~A();
- };
- struct B : A {};
- struct C : B {
- virtual void extrafoo()
- {
- }
- void foo() override {
- extrafoo();
- }
- };
- int main()
- {
- extern void do_something(C&);
- auto c = C();
- do_something(c);
- }
Add Comment
Please, Sign In to add comment