<< 24/25 >>
First Last

コンストラクタ

解決: コンストラクタを 2 つ作る

B を作る時はこっちを呼ぶ

 00000000004007a8 <B::B()>:
   4007a8:       53                      push   %rbx
   4007a9:       48 89 fb                mov    %rdi,%rbx
   4007ac:       e8 87 ff ff ff          callq  400738 <A::A()>
   4007b1:       48 c7 03 a8 0a 40 00    movq   $0x400aa8,(%rbx)
   4007b8:       bf e6 08 40 00          mov    $0x4008e6,%edi
   4007bd:       e8 b6 fd ff ff          callq  400578 <puts@plt>
   4007c2:       5b                      pop    %rbx
   4007c3:       c3                      retq

B b;

   4007d0:       48 8d 7c 24 10          lea    0x10(%rsp),%rdi
   4007d5:       e8 ce ff ff ff          callq  4007a8 <B::B()>

子クラスから呼ぶ用

 00000000004006b6 <B::B()>:
   4006b6:       48 83 ec 08             sub    $0x8,%rsp
   4006ba:       48 8b 06                mov    (%rsi),%rax
   4006bd:       48 89 07                mov    %rax,(%rdi)
   4006c0:       bf e6 08 40 00          mov    $0x4008e6,%edi
   4006c5:       e8 ae fe ff ff          callq  400578 <puts@plt>
   4006ca:       48 83 c4 08             add    $0x8,%rsp
   4006ce:       c3                      retq
   4006cf:       90                      nop

んで D は

 000000000040074c <D::D()>:
   40074c:       53                      push   %rbx
   40074d:       48 89 fb                mov    %rdi,%rbx
   400750:       e8 e3 ff ff ff          callq  400738 <A::A()>
   400755:       be 08 09 40 00          mov    $0x400908,%esi
   40075a:       48 89 df                mov    %rbx,%rdi
   40075d:       e8 54 ff ff ff          callq  4006b6 <B::B()>
   400762:       48 8d 7b 08             lea    0x8(%rbx),%rdi
   400766:       be 10 09 40 00          mov    $0x400910,%esi
   40076b:       e8 2c ff ff ff          callq  40069c <C::C()>
   400770:       48 c7 03 38 09 40 00    movq   $0x400938,(%rbx)
   400777:       48 c7 43 08 50 09 40    movq   $0x400950,0x8(%rbx)
   40077e:       00
   40077f:       bf e8 08 40 00          mov    $0x4008e8,%edi
   400784:       e8 ef fd ff ff          callq  400578 <puts@plt>
   400789:       5b                      pop    %rbx
   40078a:       c3                      retq
   40078b:       90                      nop

http://www.codesourcery.com/public/cxx-abi/abi.html#vtable-ctor