鱼C论坛

 找回密码
 立即注册
查看: 823|回复: 3

多态案例发现的一点问题

[复制链接]
匿名鱼油
匿名鱼油  发表于 2022-2-12 14:26:53 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码

#include<iostream>
using namespace std;


class CPU
{
public:
        virtual void calculate() = 0;



};

class VideoCard
{
public:

        virtual void display() = 0;


};


class Memory
{
public:

        virtual void storage() = 0;


};

class Computer
{
public:
        Computer(CPU* cpu, VideoCard* vc, Memory* mem)
        {
                m_cpu = cpu;
                m_vc = vc;
                m_mem = mem;

        }

        void work()
        {
                m_cpu->calculate();
                m_vc->display();
                m_mem->storage();


        }
        ~Computer()
        {
                if (m_cpu!= NULL)
                {
                        delete m_cpu;
                        m_cpu = NULL;
                }

                if (m_vc!= NULL)
                {
                        delete m_vc;
                        m_vc = NULL;
                }

                if (m_mem!= NULL)
                {
                        delete m_mem;
                        m_mem = NULL;

                }





        }


private:
        CPU* m_cpu;
        VideoCard* m_vc;
        Memory* m_mem;


};


class IntelCPU :public CPU
{
public:
          virtual void calculate()
        {
                cout << "Intel的CPU开始计算了!" << endl;
        }

};



class IntelVideoCard :public VideoCard
{
public:
         virtual void display()
        {
                cout << "Intel的显卡开始显示了!" << endl;
        }

};


class IntelMemory :public Memory
{
public:
        virtual void storage()
        {
                cout << "Intel的内存条开始存储了!" << endl;
        }

};




class LenovoCPU :public CPU
{
public:
        virtual void calculate()
        {
                cout << "Lenovo的CPU开始计算了!" << endl;
        }

};



class LenovoVideoCard :public VideoCard
{
public:
        virtual void display()
        {
                cout << "Lenovo的显卡开始显示了!" << endl;
        }

};


class LenovoMemory :public Memory
{
public:
        virtual void storage()
        {
                cout << "Lenovo的内存条开始存储了!" << endl;
        }

};


void test01()
{
        CPU* intelCpu = new IntelCPU;
        VideoCard* intelCard = new IntelVideoCard;
        Memory* intelMem = new IntelMemory;

        cout << "第一台电脑开始工作:" << endl;
        Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
        computer1->work();
        delete computer1;

        cout << "--------------------" << endl;
        cout << "第二台电脑开始工作:" << endl;
        Computer* computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);
        computer2->work();
        delete computer2;



        cout << "--------------------" << endl;
        cout << "第三台电脑开始工作:" << endl;
        Computer* computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);
        computer3->work();
        delete computer3;






}


int main()
{
        test01();




        system("pause");
        return 0;
}

从代码
CPU* intelCpu = new IntelCPU;
VideoCard* intelCard = new IntelVideoCard;
Memory* intelMem = new IntelMemory;
发生多态父类指针指向子类对象开始,无法理解
Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
其运行原理有点疑惑



回复

使用道具 举报

发表于 2022-2-12 14:48:15 | 显示全部楼层
运行原理?
看下面的代码
你说你不会汇编语言?不会汇编语言怎么研究运行原理?

  1. $ cat main.cpp
  2. #include<iostream>
  3. using namespace std;


  4. class CPU
  5. {
  6. public:
  7.         virtual void calculate() = 0;



  8. };

  9. class VideoCard
  10. {
  11. public:

  12.         virtual void display() = 0;


  13. };


  14. class Memory
  15. {
  16. public:

  17.         virtual void storage() = 0;


  18. };

  19. class Computer
  20. {
  21. public:
  22.         Computer(CPU* cpu, VideoCard* vc, Memory* mem)
  23.         {
  24.                 m_cpu = cpu;
  25.                 m_vc = vc;
  26.                 m_mem = mem;

  27.         }

  28.         void work()
  29.         {
  30.                 m_cpu->calculate();
  31.                 m_vc->display();
  32.                 m_mem->storage();


  33.         }
  34.         ~Computer()
  35.         {
  36.                 if (m_cpu!= NULL)
  37.                 {
  38.                         delete m_cpu;
  39.                         m_cpu = NULL;
  40.                 }

  41.                 if (m_vc!= NULL)
  42.                 {
  43.                         delete m_vc;
  44.                         m_vc = NULL;
  45.                 }

  46.                 if (m_mem!= NULL)
  47.                 {
  48.                         delete m_mem;
  49.                         m_mem = NULL;

  50.                 }





  51.         }


  52. private:
  53.         CPU* m_cpu;
  54.         VideoCard* m_vc;
  55.         Memory* m_mem;


  56. };


  57. class IntelCPU :public CPU
  58. {
  59. public:
  60.           virtual void calculate()
  61.         {
  62.                 cout << "Intel的CPU开始计算了!" << endl;
  63.         }

  64. };



  65. class IntelVideoCard :public VideoCard
  66. {
  67. public:
  68.          virtual void display()
  69.         {
  70.                 cout << "Intel的显卡开始显示了!" << endl;
  71.         }

  72. };


  73. class IntelMemory :public Memory
  74. {
  75. public:
  76.         virtual void storage()
  77.         {
  78.                 cout << "Intel的内存条开始存储了!" << endl;
  79.         }

  80. };




  81. class LenovoCPU :public CPU
  82. {
  83. public:
  84.         virtual void calculate()
  85.         {
  86.                 cout << "Lenovo的CPU开始计算了!" << endl;
  87.         }

  88. };



  89. class LenovoVideoCard :public VideoCard
  90. {
  91. public:
  92.         virtual void display()
  93.         {
  94.                 cout << "Lenovo的显卡开始显示了!" << endl;
  95.         }

  96. };


  97. class LenovoMemory :public Memory
  98. {
  99. public:
  100.         virtual void storage()
  101.         {
  102.                 cout << "Lenovo的内存条开始存储了!" << endl;
  103.         }

  104. };


  105. void test01()
  106. {
  107.         CPU* intelCpu = new IntelCPU;
  108.         VideoCard* intelCard = new IntelVideoCard;
  109.         Memory* intelMem = new IntelMemory;

  110.         cout << "第一台电脑开始工作:" << endl;
  111.         Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
  112.         computer1->work();
  113.         delete computer1;

  114.         cout << "--------------------" << endl;
  115.         cout << "第二台电脑开始工作:" << endl;
  116.         Computer* computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);
  117.         computer2->work();
  118.         delete computer2;



  119.         cout << "--------------------" << endl;
  120.         cout << "第三台电脑开始工作:" << endl;
  121.         Computer* computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);
  122.         computer3->work();
  123.         delete computer3;






  124. }


  125. int main()
  126. {
  127.         test01();




  128.         system("pause");
  129.         return 0;
  130. }
  131. $ g++ -Wall -S main.cpp
  132. main.cpp: In destructor ‘Computer::~Computer()’:
  133. main.cpp:56:25: warning: deleting object of abstract class type ‘CPU’ which has non-virtual destructor will cause undefined behavior [-Wdelete-non-virtual-dtor]
  134.    56 |                         delete m_cpu;
  135.       |                         ^~~~~~~~~~~~
  136. main.cpp:62:25: warning: deleting object of abstract class type ‘VideoCard’ which has non-virtual destructor will cause undefined behavior [-Wdelete-non-virtual-dtor]
  137.    62 |                         delete m_vc;
  138.       |                         ^~~~~~~~~~~
  139. main.cpp:68:25: warning: deleting object of abstract class type ‘Memory’ which has non-virtual destructor will cause undefined behavior [-Wdelete-non-virtual-dtor]
  140.    68 |                         delete m_mem;
  141.       |                         ^~~~~~~~~~~~
  142. $ cat main.s
  143.         .file        "main.cpp"
  144.         .text
  145.         .local        _ZStL8__ioinit
  146.         .comm        _ZStL8__ioinit,1,1
  147.         .section        .text._ZN8ComputerC2EP3CPUP9VideoCardP6Memory,"axG",@progbits,_ZN8ComputerC5EP3CPUP9VideoCardP6Memory,comdat
  148.         .align 2
  149.         .weak        _ZN8ComputerC2EP3CPUP9VideoCardP6Memory
  150.         .type        _ZN8ComputerC2EP3CPUP9VideoCardP6Memory, @function
  151. _ZN8ComputerC2EP3CPUP9VideoCardP6Memory:
  152. .LFB1730:
  153.         .cfi_startproc
  154.         pushq        %rbp
  155.         .cfi_def_cfa_offset 16
  156.         .cfi_offset 6, -16
  157.         movq        %rsp, %rbp
  158.         .cfi_def_cfa_register 6
  159.         movq        %rdi, -8(%rbp)
  160.         movq        %rsi, -16(%rbp)
  161.         movq        %rdx, -24(%rbp)
  162.         movq        %rcx, -32(%rbp)
  163.         movq        -8(%rbp), %rax
  164.         movq        -16(%rbp), %rdx
  165.         movq        %rdx, (%rax)
  166.         movq        -8(%rbp), %rax
  167.         movq        -24(%rbp), %rdx
  168.         movq        %rdx, 8(%rax)
  169.         movq        -8(%rbp), %rax
  170.         movq        -32(%rbp), %rdx
  171.         movq        %rdx, 16(%rax)
  172.         nop
  173.         popq        %rbp
  174.         .cfi_def_cfa 7, 8
  175.         ret
  176.         .cfi_endproc
  177. .LFE1730:
  178.         .size        _ZN8ComputerC2EP3CPUP9VideoCardP6Memory, .-_ZN8ComputerC2EP3CPUP9VideoCardP6Memory
  179.         .weak        _ZN8ComputerC1EP3CPUP9VideoCardP6Memory
  180.         .set        _ZN8ComputerC1EP3CPUP9VideoCardP6Memory,_ZN8ComputerC2EP3CPUP9VideoCardP6Memory
  181.         .section        .text._ZN8Computer4workEv,"axG",@progbits,_ZN8Computer4workEv,comdat
  182.         .align 2
  183.         .weak        _ZN8Computer4workEv
  184.         .type        _ZN8Computer4workEv, @function
  185. _ZN8Computer4workEv:
  186. .LFB1732:
  187.         .cfi_startproc
  188.         pushq        %rbp
  189.         .cfi_def_cfa_offset 16
  190.         .cfi_offset 6, -16
  191.         movq        %rsp, %rbp
  192.         .cfi_def_cfa_register 6
  193.         subq        $16, %rsp
  194.         movq        %rdi, -8(%rbp)
  195.         movq        -8(%rbp), %rax
  196.         movq        (%rax), %rax
  197.         movq        (%rax), %rax
  198.         movq        (%rax), %rdx
  199.         movq        -8(%rbp), %rax
  200.         movq        (%rax), %rax
  201.         movq        %rax, %rdi
  202.         call        *%rdx
  203.         movq        -8(%rbp), %rax
  204.         movq        8(%rax), %rax
  205.         movq        (%rax), %rax
  206.         movq        (%rax), %rdx
  207.         movq        -8(%rbp), %rax
  208.         movq        8(%rax), %rax
  209.         movq        %rax, %rdi
  210.         call        *%rdx
  211.         movq        -8(%rbp), %rax
  212.         movq        16(%rax), %rax
  213.         movq        (%rax), %rax
  214.         movq        (%rax), %rdx
  215.         movq        -8(%rbp), %rax
  216.         movq        16(%rax), %rax
  217.         movq        %rax, %rdi
  218.         call        *%rdx
  219.         nop
  220.         leave
  221.         .cfi_def_cfa 7, 8
  222.         ret
  223.         .cfi_endproc
  224. .LFE1732:
  225.         .size        _ZN8Computer4workEv, .-_ZN8Computer4workEv
  226.         .section        .text._ZN8ComputerD2Ev,"axG",@progbits,_ZN8ComputerD5Ev,comdat
  227.         .align 2
  228.         .weak        _ZN8ComputerD2Ev
  229.         .type        _ZN8ComputerD2Ev, @function
  230. _ZN8ComputerD2Ev:
  231. .LFB1734:
  232.         .cfi_startproc
  233.         pushq        %rbp
  234.         .cfi_def_cfa_offset 16
  235.         .cfi_offset 6, -16
  236.         movq        %rsp, %rbp
  237.         .cfi_def_cfa_register 6
  238.         subq        $16, %rsp
  239.         movq        %rdi, -8(%rbp)
  240.         movq        -8(%rbp), %rax
  241.         movq        (%rax), %rax
  242.         testq        %rax, %rax
  243.         je        .L4
  244.         movq        -8(%rbp), %rax
  245.         movq        (%rax), %rax
  246.         testq        %rax, %rax
  247.         je        .L5
  248.         movl        $8, %esi
  249.         movq        %rax, %rdi
  250.         call        _ZdlPvm@PLT
  251. .L5:
  252.         movq        -8(%rbp), %rax
  253.         movq        $0, (%rax)
  254. .L4:
  255.         movq        -8(%rbp), %rax
  256.         movq        8(%rax), %rax
  257.         testq        %rax, %rax
  258.         je        .L6
  259.         movq        -8(%rbp), %rax
  260.         movq        8(%rax), %rax
  261.         testq        %rax, %rax
  262.         je        .L7
  263.         movl        $8, %esi
  264.         movq        %rax, %rdi
  265.         call        _ZdlPvm@PLT
  266. .L7:
  267.         movq        -8(%rbp), %rax
  268.         movq        $0, 8(%rax)
  269. .L6:
  270.         movq        -8(%rbp), %rax
  271.         movq        16(%rax), %rax
  272.         testq        %rax, %rax
  273.         je        .L10
  274.         movq        -8(%rbp), %rax
  275.         movq        16(%rax), %rax
  276.         testq        %rax, %rax
  277.         je        .L9
  278.         movl        $8, %esi
  279.         movq        %rax, %rdi
  280.         call        _ZdlPvm@PLT
  281. .L9:
  282.         movq        -8(%rbp), %rax
  283.         movq        $0, 16(%rax)
  284. .L10:
  285.         nop
  286.         leave
  287.         .cfi_def_cfa 7, 8
  288.         ret
  289.         .cfi_endproc
  290. .LFE1734:
  291.         .size        _ZN8ComputerD2Ev, .-_ZN8ComputerD2Ev
  292.         .weak        _ZN8ComputerD1Ev
  293.         .set        _ZN8ComputerD1Ev,_ZN8ComputerD2Ev
  294.         .section        .rodata
  295. .LC0:
  296.         .string        "Intel\347\232\204CPU\345\274\200\345\247\213\350\256\241\347\256\227\344\272\206\357\274\201"
  297.         .section        .text._ZN8IntelCPU9calculateEv,"axG",@progbits,_ZN8IntelCPU9calculateEv,comdat
  298.         .align 2
  299.         .weak        _ZN8IntelCPU9calculateEv
  300.         .type        _ZN8IntelCPU9calculateEv, @function
  301. _ZN8IntelCPU9calculateEv:
  302. .LFB1736:
  303.         .cfi_startproc
  304.         pushq        %rbp
  305.         .cfi_def_cfa_offset 16
  306.         .cfi_offset 6, -16
  307.         movq        %rsp, %rbp
  308.         .cfi_def_cfa_register 6
  309.         subq        $16, %rsp
  310.         movq        %rdi, -8(%rbp)
  311.         leaq        .LC0(%rip), %rax
  312.         movq        %rax, %rsi
  313.         leaq        _ZSt4cout(%rip), %rax
  314.         movq        %rax, %rdi
  315.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  316.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  317.         movq        %rdx, %rsi
  318.         movq        %rax, %rdi
  319.         call        _ZNSolsEPFRSoS_E@PLT
  320.         nop
  321.         leave
  322.         .cfi_def_cfa 7, 8
  323.         ret
  324.         .cfi_endproc
  325. .LFE1736:
  326.         .size        _ZN8IntelCPU9calculateEv, .-_ZN8IntelCPU9calculateEv
  327.         .section        .rodata
  328.         .align 8
  329. .LC1:
  330.         .string        "Intel\347\232\204\346\230\276\345\215\241\345\274\200\345\247\213\346\230\276\347\244\272\344\272\206\357\274\201"
  331.         .section        .text._ZN14IntelVideoCard7displayEv,"axG",@progbits,_ZN14IntelVideoCard7displayEv,comdat
  332.         .align 2
  333.         .weak        _ZN14IntelVideoCard7displayEv
  334.         .type        _ZN14IntelVideoCard7displayEv, @function
  335. _ZN14IntelVideoCard7displayEv:
  336. .LFB1737:
  337.         .cfi_startproc
  338.         pushq        %rbp
  339.         .cfi_def_cfa_offset 16
  340.         .cfi_offset 6, -16
  341.         movq        %rsp, %rbp
  342.         .cfi_def_cfa_register 6
  343.         subq        $16, %rsp
  344.         movq        %rdi, -8(%rbp)
  345.         leaq        .LC1(%rip), %rax
  346.         movq        %rax, %rsi
  347.         leaq        _ZSt4cout(%rip), %rax
  348.         movq        %rax, %rdi
  349.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  350.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  351.         movq        %rdx, %rsi
  352.         movq        %rax, %rdi
  353.         call        _ZNSolsEPFRSoS_E@PLT
  354.         nop
  355.         leave
  356.         .cfi_def_cfa 7, 8
  357.         ret
  358.         .cfi_endproc
  359. .LFE1737:
  360.         .size        _ZN14IntelVideoCard7displayEv, .-_ZN14IntelVideoCard7displayEv
  361.         .section        .rodata
  362.         .align 8
  363. .LC2:
  364.         .string        "Intel\347\232\204\345\206\205\345\255\230\346\235\241\345\274\200\345\247\213\345\255\230\345\202\250\344\272\206\357\274\201"
  365.         .section        .text._ZN11IntelMemory7storageEv,"axG",@progbits,_ZN11IntelMemory7storageEv,comdat
  366.         .align 2
  367.         .weak        _ZN11IntelMemory7storageEv
  368.         .type        _ZN11IntelMemory7storageEv, @function
  369. _ZN11IntelMemory7storageEv:
  370. .LFB1738:
  371.         .cfi_startproc
  372.         pushq        %rbp
  373.         .cfi_def_cfa_offset 16
  374.         .cfi_offset 6, -16
  375.         movq        %rsp, %rbp
  376.         .cfi_def_cfa_register 6
  377.         subq        $16, %rsp
  378.         movq        %rdi, -8(%rbp)
  379.         leaq        .LC2(%rip), %rax
  380.         movq        %rax, %rsi
  381.         leaq        _ZSt4cout(%rip), %rax
  382.         movq        %rax, %rdi
  383.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  384.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  385.         movq        %rdx, %rsi
  386.         movq        %rax, %rdi
  387.         call        _ZNSolsEPFRSoS_E@PLT
  388.         nop
  389.         leave
  390.         .cfi_def_cfa 7, 8
  391.         ret
  392.         .cfi_endproc
  393. .LFE1738:
  394.         .size        _ZN11IntelMemory7storageEv, .-_ZN11IntelMemory7storageEv
  395.         .section        .rodata
  396.         .align 8
  397. .LC3:
  398.         .string        "Lenovo\347\232\204CPU\345\274\200\345\247\213\350\256\241\347\256\227\344\272\206\357\274\201"
  399.         .section        .text._ZN9LenovoCPU9calculateEv,"axG",@progbits,_ZN9LenovoCPU9calculateEv,comdat
  400.         .align 2
  401.         .weak        _ZN9LenovoCPU9calculateEv
  402.         .type        _ZN9LenovoCPU9calculateEv, @function
  403. _ZN9LenovoCPU9calculateEv:
  404. .LFB1739:
  405.         .cfi_startproc
  406.         pushq        %rbp
  407.         .cfi_def_cfa_offset 16
  408.         .cfi_offset 6, -16
  409.         movq        %rsp, %rbp
  410.         .cfi_def_cfa_register 6
  411.         subq        $16, %rsp
  412.         movq        %rdi, -8(%rbp)
  413.         leaq        .LC3(%rip), %rax
  414.         movq        %rax, %rsi
  415.         leaq        _ZSt4cout(%rip), %rax
  416.         movq        %rax, %rdi
  417.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  418.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  419.         movq        %rdx, %rsi
  420.         movq        %rax, %rdi
  421.         call        _ZNSolsEPFRSoS_E@PLT
  422.         nop
  423.         leave
  424.         .cfi_def_cfa 7, 8
  425.         ret
  426.         .cfi_endproc
  427. .LFE1739:
  428.         .size        _ZN9LenovoCPU9calculateEv, .-_ZN9LenovoCPU9calculateEv
  429.         .section        .rodata
  430.         .align 8
  431. .LC4:
  432.         .string        "Lenovo\347\232\204\346\230\276\345\215\241\345\274\200\345\247\213\346\230\276\347\244\272\344\272\206\357\274\201"
  433.         .section        .text._ZN15LenovoVideoCard7displayEv,"axG",@progbits,_ZN15LenovoVideoCard7displayEv,comdat
  434.         .align 2
  435.         .weak        _ZN15LenovoVideoCard7displayEv
  436.         .type        _ZN15LenovoVideoCard7displayEv, @function
  437. _ZN15LenovoVideoCard7displayEv:
  438. .LFB1740:
  439.         .cfi_startproc
  440.         pushq        %rbp
  441.         .cfi_def_cfa_offset 16
  442.         .cfi_offset 6, -16
  443.         movq        %rsp, %rbp
  444.         .cfi_def_cfa_register 6
  445.         subq        $16, %rsp
  446.         movq        %rdi, -8(%rbp)
  447.         leaq        .LC4(%rip), %rax
  448.         movq        %rax, %rsi
  449.         leaq        _ZSt4cout(%rip), %rax
  450.         movq        %rax, %rdi
  451.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  452.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  453.         movq        %rdx, %rsi
  454.         movq        %rax, %rdi
  455.         call        _ZNSolsEPFRSoS_E@PLT
  456.         nop
  457.         leave
  458.         .cfi_def_cfa 7, 8
  459.         ret
  460.         .cfi_endproc
  461. .LFE1740:
  462.         .size        _ZN15LenovoVideoCard7displayEv, .-_ZN15LenovoVideoCard7displayEv
  463.         .section        .rodata
  464.         .align 8
  465. .LC5:
  466.         .string        "Lenovo\347\232\204\345\206\205\345\255\230\346\235\241\345\274\200\345\247\213\345\255\230\345\202\250\344\272\206\357\274\201"
  467.         .section        .text._ZN12LenovoMemory7storageEv,"axG",@progbits,_ZN12LenovoMemory7storageEv,comdat
  468.         .align 2
  469.         .weak        _ZN12LenovoMemory7storageEv
  470.         .type        _ZN12LenovoMemory7storageEv, @function
  471. _ZN12LenovoMemory7storageEv:
  472. .LFB1741:
  473.         .cfi_startproc
  474.         pushq        %rbp
  475.         .cfi_def_cfa_offset 16
  476.         .cfi_offset 6, -16
  477.         movq        %rsp, %rbp
  478.         .cfi_def_cfa_register 6
  479.         subq        $16, %rsp
  480.         movq        %rdi, -8(%rbp)
  481.         leaq        .LC5(%rip), %rax
  482.         movq        %rax, %rsi
  483.         leaq        _ZSt4cout(%rip), %rax
  484.         movq        %rax, %rdi
  485.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  486.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  487.         movq        %rdx, %rsi
  488.         movq        %rax, %rdi
  489.         call        _ZNSolsEPFRSoS_E@PLT
  490.         nop
  491.         leave
  492.         .cfi_def_cfa 7, 8
  493.         ret
  494.         .cfi_endproc
  495. .LFE1741:
  496.         .size        _ZN12LenovoMemory7storageEv, .-_ZN12LenovoMemory7storageEv
  497.         .section        .text._ZN3CPUC2Ev,"axG",@progbits,_ZN3CPUC5Ev,comdat
  498.         .align 2
  499.         .weak        _ZN3CPUC2Ev
  500.         .type        _ZN3CPUC2Ev, @function
  501. _ZN3CPUC2Ev:
  502. .LFB1745:
  503.         .cfi_startproc
  504.         pushq        %rbp
  505.         .cfi_def_cfa_offset 16
  506.         .cfi_offset 6, -16
  507.         movq        %rsp, %rbp
  508.         .cfi_def_cfa_register 6
  509.         movq        %rdi, -8(%rbp)
  510.         leaq        16+_ZTV3CPU(%rip), %rdx
  511.         movq        -8(%rbp), %rax
  512.         movq        %rdx, (%rax)
  513.         nop
  514.         popq        %rbp
  515.         .cfi_def_cfa 7, 8
  516.         ret
  517.         .cfi_endproc
  518. .LFE1745:
  519.         .size        _ZN3CPUC2Ev, .-_ZN3CPUC2Ev
  520.         .weak        _ZN3CPUC1Ev
  521.         .set        _ZN3CPUC1Ev,_ZN3CPUC2Ev
  522.         .section        .text._ZN8IntelCPUC2Ev,"axG",@progbits,_ZN8IntelCPUC5Ev,comdat
  523.         .align 2
  524.         .weak        _ZN8IntelCPUC2Ev
  525.         .type        _ZN8IntelCPUC2Ev, @function
  526. _ZN8IntelCPUC2Ev:
  527. .LFB1747:
  528.         .cfi_startproc
  529.         pushq        %rbp
  530.         .cfi_def_cfa_offset 16
  531.         .cfi_offset 6, -16
  532.         movq        %rsp, %rbp
  533.         .cfi_def_cfa_register 6
  534.         subq        $16, %rsp
  535.         movq        %rdi, -8(%rbp)
  536.         movq        -8(%rbp), %rax
  537.         movq        %rax, %rdi
  538.         call        _ZN3CPUC2Ev
  539.         leaq        16+_ZTV8IntelCPU(%rip), %rdx
  540.         movq        -8(%rbp), %rax
  541.         movq        %rdx, (%rax)
  542.         nop
  543.         leave
  544.         .cfi_def_cfa 7, 8
  545.         ret
  546.         .cfi_endproc
  547. .LFE1747:
  548.         .size        _ZN8IntelCPUC2Ev, .-_ZN8IntelCPUC2Ev
  549.         .weak        _ZN8IntelCPUC1Ev
  550.         .set        _ZN8IntelCPUC1Ev,_ZN8IntelCPUC2Ev
  551.         .section        .text._ZN9VideoCardC2Ev,"axG",@progbits,_ZN9VideoCardC5Ev,comdat
  552.         .align 2
  553.         .weak        _ZN9VideoCardC2Ev
  554.         .type        _ZN9VideoCardC2Ev, @function
  555. _ZN9VideoCardC2Ev:
  556. .LFB1751:
  557.         .cfi_startproc
  558.         pushq        %rbp
  559.         .cfi_def_cfa_offset 16
  560.         .cfi_offset 6, -16
  561.         movq        %rsp, %rbp
  562.         .cfi_def_cfa_register 6
  563.         movq        %rdi, -8(%rbp)
  564.         leaq        16+_ZTV9VideoCard(%rip), %rdx
  565.         movq        -8(%rbp), %rax
  566.         movq        %rdx, (%rax)
  567.         nop
  568.         popq        %rbp
  569.         .cfi_def_cfa 7, 8
  570.         ret
  571.         .cfi_endproc
  572. .LFE1751:
  573.         .size        _ZN9VideoCardC2Ev, .-_ZN9VideoCardC2Ev
  574.         .weak        _ZN9VideoCardC1Ev
  575.         .set        _ZN9VideoCardC1Ev,_ZN9VideoCardC2Ev
  576.         .section        .text._ZN14IntelVideoCardC2Ev,"axG",@progbits,_ZN14IntelVideoCardC5Ev,comdat
  577.         .align 2
  578.         .weak        _ZN14IntelVideoCardC2Ev
  579.         .type        _ZN14IntelVideoCardC2Ev, @function
  580. _ZN14IntelVideoCardC2Ev:
  581. .LFB1753:
  582.         .cfi_startproc
  583.         pushq        %rbp
  584.         .cfi_def_cfa_offset 16
  585.         .cfi_offset 6, -16
  586.         movq        %rsp, %rbp
  587.         .cfi_def_cfa_register 6
  588.         subq        $16, %rsp
  589.         movq        %rdi, -8(%rbp)
  590.         movq        -8(%rbp), %rax
  591.         movq        %rax, %rdi
  592.         call        _ZN9VideoCardC2Ev
  593.         leaq        16+_ZTV14IntelVideoCard(%rip), %rdx
  594.         movq        -8(%rbp), %rax
  595.         movq        %rdx, (%rax)
  596.         nop
  597.         leave
  598.         .cfi_def_cfa 7, 8
  599.         ret
  600.         .cfi_endproc
  601. .LFE1753:
  602.         .size        _ZN14IntelVideoCardC2Ev, .-_ZN14IntelVideoCardC2Ev
  603.         .weak        _ZN14IntelVideoCardC1Ev
  604.         .set        _ZN14IntelVideoCardC1Ev,_ZN14IntelVideoCardC2Ev
  605.         .section        .text._ZN6MemoryC2Ev,"axG",@progbits,_ZN6MemoryC5Ev,comdat
  606.         .align 2
  607.         .weak        _ZN6MemoryC2Ev
  608.         .type        _ZN6MemoryC2Ev, @function
  609. _ZN6MemoryC2Ev:
  610. .LFB1757:
  611.         .cfi_startproc
  612.         pushq        %rbp
  613.         .cfi_def_cfa_offset 16
  614.         .cfi_offset 6, -16
  615.         movq        %rsp, %rbp
  616.         .cfi_def_cfa_register 6
  617.         movq        %rdi, -8(%rbp)
  618.         leaq        16+_ZTV6Memory(%rip), %rdx
  619.         movq        -8(%rbp), %rax
  620.         movq        %rdx, (%rax)
  621.         nop
  622.         popq        %rbp
  623.         .cfi_def_cfa 7, 8
  624.         ret
  625.         .cfi_endproc
  626. .LFE1757:
  627.         .size        _ZN6MemoryC2Ev, .-_ZN6MemoryC2Ev
  628.         .weak        _ZN6MemoryC1Ev
  629.         .set        _ZN6MemoryC1Ev,_ZN6MemoryC2Ev
  630.         .section        .text._ZN11IntelMemoryC2Ev,"axG",@progbits,_ZN11IntelMemoryC5Ev,comdat
  631.         .align 2
  632.         .weak        _ZN11IntelMemoryC2Ev
  633.         .type        _ZN11IntelMemoryC2Ev, @function
  634. _ZN11IntelMemoryC2Ev:
  635. .LFB1759:
  636.         .cfi_startproc
  637.         pushq        %rbp
  638.         .cfi_def_cfa_offset 16
  639.         .cfi_offset 6, -16
  640.         movq        %rsp, %rbp
  641.         .cfi_def_cfa_register 6
  642.         subq        $16, %rsp
  643.         movq        %rdi, -8(%rbp)
  644.         movq        -8(%rbp), %rax
  645.         movq        %rax, %rdi
  646.         call        _ZN6MemoryC2Ev
  647.         leaq        16+_ZTV11IntelMemory(%rip), %rdx
  648.         movq        -8(%rbp), %rax
  649.         movq        %rdx, (%rax)
  650.         nop
  651.         leave
  652.         .cfi_def_cfa 7, 8
  653.         ret
  654.         .cfi_endproc
  655. .LFE1759:
  656.         .size        _ZN11IntelMemoryC2Ev, .-_ZN11IntelMemoryC2Ev
  657.         .weak        _ZN11IntelMemoryC1Ev
  658.         .set        _ZN11IntelMemoryC1Ev,_ZN11IntelMemoryC2Ev
  659.         .section        .text._ZN9LenovoCPUC2Ev,"axG",@progbits,_ZN9LenovoCPUC5Ev,comdat
  660.         .align 2
  661.         .weak        _ZN9LenovoCPUC2Ev
  662.         .type        _ZN9LenovoCPUC2Ev, @function
  663. _ZN9LenovoCPUC2Ev:
  664. .LFB1762:
  665.         .cfi_startproc
  666.         pushq        %rbp
  667.         .cfi_def_cfa_offset 16
  668.         .cfi_offset 6, -16
  669.         movq        %rsp, %rbp
  670.         .cfi_def_cfa_register 6
  671.         subq        $16, %rsp
  672.         movq        %rdi, -8(%rbp)
  673.         movq        -8(%rbp), %rax
  674.         movq        %rax, %rdi
  675.         call        _ZN3CPUC2Ev
  676.         leaq        16+_ZTV9LenovoCPU(%rip), %rdx
  677.         movq        -8(%rbp), %rax
  678.         movq        %rdx, (%rax)
  679.         nop
  680.         leave
  681.         .cfi_def_cfa 7, 8
  682.         ret
  683.         .cfi_endproc
  684. .LFE1762:
  685.         .size        _ZN9LenovoCPUC2Ev, .-_ZN9LenovoCPUC2Ev
  686.         .weak        _ZN9LenovoCPUC1Ev
  687.         .set        _ZN9LenovoCPUC1Ev,_ZN9LenovoCPUC2Ev
  688.         .section        .text._ZN15LenovoVideoCardC2Ev,"axG",@progbits,_ZN15LenovoVideoCardC5Ev,comdat
  689.         .align 2
  690.         .weak        _ZN15LenovoVideoCardC2Ev
  691.         .type        _ZN15LenovoVideoCardC2Ev, @function
  692. _ZN15LenovoVideoCardC2Ev:
  693. .LFB1765:
  694.         .cfi_startproc
  695.         pushq        %rbp
  696.         .cfi_def_cfa_offset 16
  697.         .cfi_offset 6, -16
  698.         movq        %rsp, %rbp
  699.         .cfi_def_cfa_register 6
  700.         subq        $16, %rsp
  701.         movq        %rdi, -8(%rbp)
  702.         movq        -8(%rbp), %rax
  703.         movq        %rax, %rdi
  704.         call        _ZN9VideoCardC2Ev
  705.         leaq        16+_ZTV15LenovoVideoCard(%rip), %rdx
  706.         movq        -8(%rbp), %rax
  707.         movq        %rdx, (%rax)
  708.         nop
  709.         leave
  710.         .cfi_def_cfa 7, 8
  711.         ret
  712.         .cfi_endproc
  713. .LFE1765:
  714.         .size        _ZN15LenovoVideoCardC2Ev, .-_ZN15LenovoVideoCardC2Ev
  715.         .weak        _ZN15LenovoVideoCardC1Ev
  716.         .set        _ZN15LenovoVideoCardC1Ev,_ZN15LenovoVideoCardC2Ev
  717.         .section        .text._ZN12LenovoMemoryC2Ev,"axG",@progbits,_ZN12LenovoMemoryC5Ev,comdat
  718.         .align 2
  719.         .weak        _ZN12LenovoMemoryC2Ev
  720.         .type        _ZN12LenovoMemoryC2Ev, @function
  721. _ZN12LenovoMemoryC2Ev:
  722. .LFB1768:
  723.         .cfi_startproc
  724.         pushq        %rbp
  725.         .cfi_def_cfa_offset 16
  726.         .cfi_offset 6, -16
  727.         movq        %rsp, %rbp
  728.         .cfi_def_cfa_register 6
  729.         subq        $16, %rsp
  730.         movq        %rdi, -8(%rbp)
  731.         movq        -8(%rbp), %rax
  732.         movq        %rax, %rdi
  733.         call        _ZN6MemoryC2Ev
  734.         leaq        16+_ZTV12LenovoMemory(%rip), %rdx
  735.         movq        -8(%rbp), %rax
  736.         movq        %rdx, (%rax)
  737.         nop
  738.         leave
  739.         .cfi_def_cfa 7, 8
  740.         ret
  741.         .cfi_endproc
  742. .LFE1768:
  743.         .size        _ZN12LenovoMemoryC2Ev, .-_ZN12LenovoMemoryC2Ev
  744.         .weak        _ZN12LenovoMemoryC1Ev
  745.         .set        _ZN12LenovoMemoryC1Ev,_ZN12LenovoMemoryC2Ev
  746.         .section        .rodata
  747. .LC6:
  748.         .string        "\347\254\254\344\270\200\345\217\260\347\224\265\350\204\221\345\274\200\345\247\213\345\267\245\344\275\234:"
  749. .LC7:
  750.         .string        "--------------------"
  751. .LC8:
  752.         .string        "\347\254\254\344\272\214\345\217\260\347\224\265\350\204\221\345\274\200\345\247\213\345\267\245\344\275\234:"
  753. .LC9:
  754.         .string        "\347\254\254\344\270\211\345\217\260\347\224\265\350\204\221\345\274\200\345\247\213\345\267\245\344\275\234:"
  755.         .text
  756.         .globl        _Z6test01v
  757.         .type        _Z6test01v, @function
  758. _Z6test01v:
  759. .LFB1742:
  760.         .cfi_startproc
  761.         pushq        %rbp
  762.         .cfi_def_cfa_offset 16
  763.         .cfi_offset 6, -16
  764.         movq        %rsp, %rbp
  765.         .cfi_def_cfa_register 6
  766.         pushq        %r14
  767.         pushq        %r13
  768.         pushq        %r12
  769.         pushq        %rbx
  770.         subq        $48, %rsp
  771.         .cfi_offset 14, -24
  772.         .cfi_offset 13, -32
  773.         .cfi_offset 12, -40
  774.         .cfi_offset 3, -48
  775.         movl        $8, %edi
  776.         call        _Znwm@PLT
  777.         movq        %rax, %rbx
  778.         movq        %rbx, %rdi
  779.         call        _ZN8IntelCPUC1Ev
  780.         movq        %rbx, -80(%rbp)
  781.         movl        $8, %edi
  782.         call        _Znwm@PLT
  783.         movq        %rax, %rbx
  784.         movq        %rbx, %rdi
  785.         call        _ZN14IntelVideoCardC1Ev
  786.         movq        %rbx, -72(%rbp)
  787.         movl        $8, %edi
  788.         call        _Znwm@PLT
  789.         movq        %rax, %rbx
  790.         movq        %rbx, %rdi
  791.         call        _ZN11IntelMemoryC1Ev
  792.         movq        %rbx, -64(%rbp)
  793.         leaq        .LC6(%rip), %rax
  794.         movq        %rax, %rsi
  795.         leaq        _ZSt4cout(%rip), %rax
  796.         movq        %rax, %rdi
  797.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  798.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  799.         movq        %rdx, %rsi
  800.         movq        %rax, %rdi
  801.         call        _ZNSolsEPFRSoS_E@PLT
  802.         movl        $24, %edi
  803.         call        _Znwm@PLT
  804.         movq        %rax, %rbx
  805.         movq        -64(%rbp), %rcx
  806.         movq        -72(%rbp), %rdx
  807.         movq        -80(%rbp), %rax
  808.         movq        %rax, %rsi
  809.         movq        %rbx, %rdi
  810.         call        _ZN8ComputerC1EP3CPUP9VideoCardP6Memory
  811.         movq        %rbx, -56(%rbp)
  812.         movq        -56(%rbp), %rax
  813.         movq        %rax, %rdi
  814.         call        _ZN8Computer4workEv
  815.         movq        -56(%rbp), %rbx
  816.         testq        %rbx, %rbx
  817.         je        .L27
  818.         movq        %rbx, %rdi
  819.         call        _ZN8ComputerD1Ev
  820.         movl        $24, %esi
  821.         movq        %rbx, %rdi
  822.         call        _ZdlPvm@PLT
  823. .L27:
  824.         leaq        .LC7(%rip), %rax
  825.         movq        %rax, %rsi
  826.         leaq        _ZSt4cout(%rip), %rax
  827.         movq        %rax, %rdi
  828.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  829.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  830.         movq        %rdx, %rsi
  831.         movq        %rax, %rdi
  832.         call        _ZNSolsEPFRSoS_E@PLT
  833.         leaq        .LC8(%rip), %rax
  834.         movq        %rax, %rsi
  835.         leaq        _ZSt4cout(%rip), %rax
  836.         movq        %rax, %rdi
  837.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  838.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  839.         movq        %rdx, %rsi
  840.         movq        %rax, %rdi
  841.         call        _ZNSolsEPFRSoS_E@PLT
  842.         movl        $8, %edi
  843.         call        _Znwm@PLT
  844.         movq        %rax, %rbx
  845.         movq        %rbx, %rdi
  846.         call        _ZN9LenovoCPUC1Ev
  847.         movl        $8, %edi
  848.         call        _Znwm@PLT
  849.         movq        %rax, %r12
  850.         movq        %r12, %rdi
  851.         call        _ZN15LenovoVideoCardC1Ev
  852.         movl        $8, %edi
  853.         call        _Znwm@PLT
  854.         movq        %rax, %r13
  855.         movq        %r13, %rdi
  856.         call        _ZN12LenovoMemoryC1Ev
  857.         movl        $24, %edi
  858.         call        _Znwm@PLT
  859.         movq        %rax, %r14
  860.         movq        %r13, %rcx
  861.         movq        %r12, %rdx
  862.         movq        %rbx, %rsi
  863.         movq        %r14, %rdi
  864.         call        _ZN8ComputerC1EP3CPUP9VideoCardP6Memory
  865.         movq        %r14, -48(%rbp)
  866.         movq        -48(%rbp), %rax
  867.         movq        %rax, %rdi
  868.         call        _ZN8Computer4workEv
  869.         movq        -48(%rbp), %rbx
  870.         testq        %rbx, %rbx
  871.         je        .L28
  872.         movq        %rbx, %rdi
  873.         call        _ZN8ComputerD1Ev
  874.         movl        $24, %esi
  875.         movq        %rbx, %rdi
  876.         call        _ZdlPvm@PLT
  877. .L28:
  878.         leaq        .LC7(%rip), %rax
  879.         movq        %rax, %rsi
  880.         leaq        _ZSt4cout(%rip), %rax
  881.         movq        %rax, %rdi
  882.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  883.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  884.         movq        %rdx, %rsi
  885.         movq        %rax, %rdi
  886.         call        _ZNSolsEPFRSoS_E@PLT
  887.         leaq        .LC9(%rip), %rax
  888.         movq        %rax, %rsi
  889.         leaq        _ZSt4cout(%rip), %rax
  890.         movq        %rax, %rdi
  891.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  892.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  893.         movq        %rdx, %rsi
  894.         movq        %rax, %rdi
  895.         call        _ZNSolsEPFRSoS_E@PLT
  896.         movl        $8, %edi
  897.         call        _Znwm@PLT
  898.         movq        %rax, %rbx
  899.         movq        %rbx, %rdi
  900.         call        _ZN9LenovoCPUC1Ev
  901.         movl        $8, %edi
  902.         call        _Znwm@PLT
  903.         movq        %rax, %r12
  904.         movq        %r12, %rdi
  905.         call        _ZN14IntelVideoCardC1Ev
  906.         movl        $8, %edi
  907.         call        _Znwm@PLT
  908.         movq        %rax, %r13
  909.         movq        %r13, %rdi
  910.         call        _ZN12LenovoMemoryC1Ev
  911.         movl        $24, %edi
  912.         call        _Znwm@PLT
  913.         movq        %rax, %r14
  914.         movq        %r13, %rcx
  915.         movq        %r12, %rdx
  916.         movq        %rbx, %rsi
  917.         movq        %r14, %rdi
  918.         call        _ZN8ComputerC1EP3CPUP9VideoCardP6Memory
  919.         movq        %r14, -40(%rbp)
  920.         movq        -40(%rbp), %rax
  921.         movq        %rax, %rdi
  922.         call        _ZN8Computer4workEv
  923.         movq        -40(%rbp), %rbx
  924.         testq        %rbx, %rbx
  925.         je        .L30
  926.         movq        %rbx, %rdi
  927.         call        _ZN8ComputerD1Ev
  928.         movl        $24, %esi
  929.         movq        %rbx, %rdi
  930.         call        _ZdlPvm@PLT
  931. .L30:
  932.         nop
  933.         addq        $48, %rsp
  934.         popq        %rbx
  935.         popq        %r12
  936.         popq        %r13
  937.         popq        %r14
  938.         popq        %rbp
  939.         .cfi_def_cfa 7, 8
  940.         ret
  941.         .cfi_endproc
  942. .LFE1742:
  943.         .size        _Z6test01v, .-_Z6test01v
  944.         .section        .rodata
  945. .LC10:
  946.         .string        "pause"
  947.         .text
  948.         .globl        main
  949.         .type        main, @function
  950. main:
  951. .LFB1770:
  952.         .cfi_startproc
  953.         pushq        %rbp
  954.         .cfi_def_cfa_offset 16
  955.         .cfi_offset 6, -16
  956.         movq        %rsp, %rbp
  957.         .cfi_def_cfa_register 6
  958.         call        _Z6test01v
  959.         leaq        .LC10(%rip), %rax
  960.         movq        %rax, %rdi
  961.         call        system@PLT
  962.         movl        $0, %eax
  963.         popq        %rbp
  964.         .cfi_def_cfa 7, 8
  965.         ret
  966.         .cfi_endproc
  967. .LFE1770:
  968.         .size        main, .-main
  969.         .weak        _ZTV12LenovoMemory
  970.         .section        .data.rel.ro.local._ZTV12LenovoMemory,"awG",@progbits,_ZTV12LenovoMemory,comdat
  971.         .align 8
  972.         .type        _ZTV12LenovoMemory, @object
  973.         .size        _ZTV12LenovoMemory, 24
  974. _ZTV12LenovoMemory:
  975.         .quad        0
  976.         .quad        _ZTI12LenovoMemory
  977.         .quad        _ZN12LenovoMemory7storageEv
  978.         .weak        _ZTV15LenovoVideoCard
  979.         .section        .data.rel.ro.local._ZTV15LenovoVideoCard,"awG",@progbits,_ZTV15LenovoVideoCard,comdat
  980.         .align 8
  981.         .type        _ZTV15LenovoVideoCard, @object
  982.         .size        _ZTV15LenovoVideoCard, 24
  983. _ZTV15LenovoVideoCard:
  984.         .quad        0
  985.         .quad        _ZTI15LenovoVideoCard
  986.         .quad        _ZN15LenovoVideoCard7displayEv
  987.         .weak        _ZTV9LenovoCPU
  988.         .section        .data.rel.ro.local._ZTV9LenovoCPU,"awG",@progbits,_ZTV9LenovoCPU,comdat
  989.         .align 8
  990.         .type        _ZTV9LenovoCPU, @object
  991.         .size        _ZTV9LenovoCPU, 24
  992. _ZTV9LenovoCPU:
  993.         .quad        0
  994.         .quad        _ZTI9LenovoCPU
  995.         .quad        _ZN9LenovoCPU9calculateEv
  996.         .weak        _ZTV11IntelMemory
  997.         .section        .data.rel.ro.local._ZTV11IntelMemory,"awG",@progbits,_ZTV11IntelMemory,comdat
  998.         .align 8
  999.         .type        _ZTV11IntelMemory, @object
  1000.         .size        _ZTV11IntelMemory, 24
  1001. _ZTV11IntelMemory:
  1002.         .quad        0
  1003.         .quad        _ZTI11IntelMemory
  1004.         .quad        _ZN11IntelMemory7storageEv
  1005.         .weak        _ZTV14IntelVideoCard
  1006.         .section        .data.rel.ro.local._ZTV14IntelVideoCard,"awG",@progbits,_ZTV14IntelVideoCard,comdat
  1007.         .align 8
  1008.         .type        _ZTV14IntelVideoCard, @object
  1009.         .size        _ZTV14IntelVideoCard, 24
  1010. _ZTV14IntelVideoCard:
  1011.         .quad        0
  1012.         .quad        _ZTI14IntelVideoCard
  1013.         .quad        _ZN14IntelVideoCard7displayEv
  1014.         .weak        _ZTV8IntelCPU
  1015.         .section        .data.rel.ro.local._ZTV8IntelCPU,"awG",@progbits,_ZTV8IntelCPU,comdat
  1016.         .align 8
  1017.         .type        _ZTV8IntelCPU, @object
  1018.         .size        _ZTV8IntelCPU, 24
  1019. _ZTV8IntelCPU:
  1020.         .quad        0
  1021.         .quad        _ZTI8IntelCPU
  1022.         .quad        _ZN8IntelCPU9calculateEv
  1023.         .weak        _ZTV6Memory
  1024.         .section        .data.rel.ro._ZTV6Memory,"awG",@progbits,_ZTV6Memory,comdat
  1025.         .align 8
  1026.         .type        _ZTV6Memory, @object
  1027.         .size        _ZTV6Memory, 24
  1028. _ZTV6Memory:
  1029.         .quad        0
  1030.         .quad        _ZTI6Memory
  1031.         .quad        __cxa_pure_virtual
  1032.         .weak        _ZTV9VideoCard
  1033.         .section        .data.rel.ro._ZTV9VideoCard,"awG",@progbits,_ZTV9VideoCard,comdat
  1034.         .align 8
  1035.         .type        _ZTV9VideoCard, @object
  1036.         .size        _ZTV9VideoCard, 24
  1037. _ZTV9VideoCard:
  1038.         .quad        0
  1039.         .quad        _ZTI9VideoCard
  1040.         .quad        __cxa_pure_virtual
  1041.         .weak        _ZTV3CPU
  1042.         .section        .data.rel.ro._ZTV3CPU,"awG",@progbits,_ZTV3CPU,comdat
  1043.         .align 8
  1044.         .type        _ZTV3CPU, @object
  1045.         .size        _ZTV3CPU, 24
  1046. _ZTV3CPU:
  1047.         .quad        0
  1048.         .quad        _ZTI3CPU
  1049.         .quad        __cxa_pure_virtual
  1050.         .weak        _ZTI12LenovoMemory
  1051.         .section        .data.rel.ro._ZTI12LenovoMemory,"awG",@progbits,_ZTI12LenovoMemory,comdat
  1052.         .align 8
  1053.         .type        _ZTI12LenovoMemory, @object
  1054.         .size        _ZTI12LenovoMemory, 24
  1055. _ZTI12LenovoMemory:
  1056.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1057.         .quad        _ZTS12LenovoMemory
  1058.         .quad        _ZTI6Memory
  1059.         .weak        _ZTS12LenovoMemory
  1060.         .section        .rodata._ZTS12LenovoMemory,"aG",@progbits,_ZTS12LenovoMemory,comdat
  1061.         .align 8
  1062.         .type        _ZTS12LenovoMemory, @object
  1063.         .size        _ZTS12LenovoMemory, 15
  1064. _ZTS12LenovoMemory:
  1065.         .string        "12LenovoMemory"
  1066.         .weak        _ZTI15LenovoVideoCard
  1067.         .section        .data.rel.ro._ZTI15LenovoVideoCard,"awG",@progbits,_ZTI15LenovoVideoCard,comdat
  1068.         .align 8
  1069.         .type        _ZTI15LenovoVideoCard, @object
  1070.         .size        _ZTI15LenovoVideoCard, 24
  1071. _ZTI15LenovoVideoCard:
  1072.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1073.         .quad        _ZTS15LenovoVideoCard
  1074.         .quad        _ZTI9VideoCard
  1075.         .weak        _ZTS15LenovoVideoCard
  1076.         .section        .rodata._ZTS15LenovoVideoCard,"aG",@progbits,_ZTS15LenovoVideoCard,comdat
  1077.         .align 16
  1078.         .type        _ZTS15LenovoVideoCard, @object
  1079.         .size        _ZTS15LenovoVideoCard, 18
  1080. _ZTS15LenovoVideoCard:
  1081.         .string        "15LenovoVideoCard"
  1082.         .weak        _ZTI9LenovoCPU
  1083.         .section        .data.rel.ro._ZTI9LenovoCPU,"awG",@progbits,_ZTI9LenovoCPU,comdat
  1084.         .align 8
  1085.         .type        _ZTI9LenovoCPU, @object
  1086.         .size        _ZTI9LenovoCPU, 24
  1087. _ZTI9LenovoCPU:
  1088.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1089.         .quad        _ZTS9LenovoCPU
  1090.         .quad        _ZTI3CPU
  1091.         .weak        _ZTS9LenovoCPU
  1092.         .section        .rodata._ZTS9LenovoCPU,"aG",@progbits,_ZTS9LenovoCPU,comdat
  1093.         .align 8
  1094.         .type        _ZTS9LenovoCPU, @object
  1095.         .size        _ZTS9LenovoCPU, 11
  1096. _ZTS9LenovoCPU:
  1097.         .string        "9LenovoCPU"
  1098.         .weak        _ZTI11IntelMemory
  1099.         .section        .data.rel.ro._ZTI11IntelMemory,"awG",@progbits,_ZTI11IntelMemory,comdat
  1100.         .align 8
  1101.         .type        _ZTI11IntelMemory, @object
  1102.         .size        _ZTI11IntelMemory, 24
  1103. _ZTI11IntelMemory:
  1104.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1105.         .quad        _ZTS11IntelMemory
  1106.         .quad        _ZTI6Memory
  1107.         .weak        _ZTS11IntelMemory
  1108.         .section        .rodata._ZTS11IntelMemory,"aG",@progbits,_ZTS11IntelMemory,comdat
  1109.         .align 8
  1110.         .type        _ZTS11IntelMemory, @object
  1111.         .size        _ZTS11IntelMemory, 14
  1112. _ZTS11IntelMemory:
  1113.         .string        "11IntelMemory"
  1114.         .weak        _ZTI14IntelVideoCard
  1115.         .section        .data.rel.ro._ZTI14IntelVideoCard,"awG",@progbits,_ZTI14IntelVideoCard,comdat
  1116.         .align 8
  1117.         .type        _ZTI14IntelVideoCard, @object
  1118.         .size        _ZTI14IntelVideoCard, 24
  1119. _ZTI14IntelVideoCard:
  1120.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1121.         .quad        _ZTS14IntelVideoCard
  1122.         .quad        _ZTI9VideoCard
  1123.         .weak        _ZTS14IntelVideoCard
  1124.         .section        .rodata._ZTS14IntelVideoCard,"aG",@progbits,_ZTS14IntelVideoCard,comdat
  1125.         .align 16
  1126.         .type        _ZTS14IntelVideoCard, @object
  1127.         .size        _ZTS14IntelVideoCard, 17
  1128. _ZTS14IntelVideoCard:
  1129.         .string        "14IntelVideoCard"
  1130.         .weak        _ZTI8IntelCPU
  1131.         .section        .data.rel.ro._ZTI8IntelCPU,"awG",@progbits,_ZTI8IntelCPU,comdat
  1132.         .align 8
  1133.         .type        _ZTI8IntelCPU, @object
  1134.         .size        _ZTI8IntelCPU, 24
  1135. _ZTI8IntelCPU:
  1136.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  1137.         .quad        _ZTS8IntelCPU
  1138.         .quad        _ZTI3CPU
  1139.         .weak        _ZTS8IntelCPU
  1140.         .section        .rodata._ZTS8IntelCPU,"aG",@progbits,_ZTS8IntelCPU,comdat
  1141.         .align 8
  1142.         .type        _ZTS8IntelCPU, @object
  1143.         .size        _ZTS8IntelCPU, 10
  1144. _ZTS8IntelCPU:
  1145.         .string        "8IntelCPU"
  1146.         .weak        _ZTI6Memory
  1147.         .section        .data.rel.ro._ZTI6Memory,"awG",@progbits,_ZTI6Memory,comdat
  1148.         .align 8
  1149.         .type        _ZTI6Memory, @object
  1150.         .size        _ZTI6Memory, 16
  1151. _ZTI6Memory:
  1152.         .quad        _ZTVN10__cxxabiv117__class_type_infoE+16
  1153.         .quad        _ZTS6Memory
  1154.         .weak        _ZTS6Memory
  1155.         .section        .rodata._ZTS6Memory,"aG",@progbits,_ZTS6Memory,comdat
  1156.         .align 8
  1157.         .type        _ZTS6Memory, @object
  1158.         .size        _ZTS6Memory, 8
  1159. _ZTS6Memory:
  1160.         .string        "6Memory"
  1161.         .weak        _ZTI9VideoCard
  1162.         .section        .data.rel.ro._ZTI9VideoCard,"awG",@progbits,_ZTI9VideoCard,comdat
  1163.         .align 8
  1164.         .type        _ZTI9VideoCard, @object
  1165.         .size        _ZTI9VideoCard, 16
  1166. _ZTI9VideoCard:
  1167.         .quad        _ZTVN10__cxxabiv117__class_type_infoE+16
  1168.         .quad        _ZTS9VideoCard
  1169.         .weak        _ZTS9VideoCard
  1170.         .section        .rodata._ZTS9VideoCard,"aG",@progbits,_ZTS9VideoCard,comdat
  1171.         .align 8
  1172.         .type        _ZTS9VideoCard, @object
  1173.         .size        _ZTS9VideoCard, 11
  1174. _ZTS9VideoCard:
  1175.         .string        "9VideoCard"
  1176.         .weak        _ZTI3CPU
  1177.         .section        .data.rel.ro._ZTI3CPU,"awG",@progbits,_ZTI3CPU,comdat
  1178.         .align 8
  1179.         .type        _ZTI3CPU, @object
  1180.         .size        _ZTI3CPU, 16
  1181. _ZTI3CPU:
  1182.         .quad        _ZTVN10__cxxabiv117__class_type_infoE+16
  1183.         .quad        _ZTS3CPU
  1184.         .weak        _ZTS3CPU
  1185.         .section        .rodata._ZTS3CPU,"aG",@progbits,_ZTS3CPU,comdat
  1186.         .type        _ZTS3CPU, @object
  1187.         .size        _ZTS3CPU, 5
  1188. _ZTS3CPU:
  1189.         .string        "3CPU"
  1190.         .text
  1191.         .type        _Z41__static_initialization_and_destruction_0ii, @function
  1192. _Z41__static_initialization_and_destruction_0ii:
  1193. .LFB2273:
  1194.         .cfi_startproc
  1195.         pushq        %rbp
  1196.         .cfi_def_cfa_offset 16
  1197.         .cfi_offset 6, -16
  1198.         movq        %rsp, %rbp
  1199.         .cfi_def_cfa_register 6
  1200.         subq        $16, %rsp
  1201.         movl        %edi, -4(%rbp)
  1202.         movl        %esi, -8(%rbp)
  1203.         cmpl        $1, -4(%rbp)
  1204.         jne        .L35
  1205.         cmpl        $65535, -8(%rbp)
  1206.         jne        .L35
  1207.         leaq        _ZStL8__ioinit(%rip), %rax
  1208.         movq        %rax, %rdi
  1209.         call        _ZNSt8ios_base4InitC1Ev@PLT
  1210.         leaq        __dso_handle(%rip), %rax
  1211.         movq        %rax, %rdx
  1212.         leaq        _ZStL8__ioinit(%rip), %rax
  1213.         movq        %rax, %rsi
  1214.         movq        _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rax
  1215.         movq        %rax, %rdi
  1216.         call        __cxa_atexit@PLT
  1217. .L35:
  1218.         nop
  1219.         leave
  1220.         .cfi_def_cfa 7, 8
  1221.         ret
  1222.         .cfi_endproc
  1223. .LFE2273:
  1224.         .size        _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
  1225.         .type        _GLOBAL__sub_I__Z6test01v, @function
  1226. _GLOBAL__sub_I__Z6test01v:
  1227. .LFB2274:
  1228.         .cfi_startproc
  1229.         pushq        %rbp
  1230.         .cfi_def_cfa_offset 16
  1231.         .cfi_offset 6, -16
  1232.         movq        %rsp, %rbp
  1233.         .cfi_def_cfa_register 6
  1234.         movl        $65535, %esi
  1235.         movl        $1, %edi
  1236.         call        _Z41__static_initialization_and_destruction_0ii
  1237.         popq        %rbp
  1238.         .cfi_def_cfa 7, 8
  1239.         ret
  1240.         .cfi_endproc
  1241. .LFE2274:
  1242.         .size        _GLOBAL__sub_I__Z6test01v, .-_GLOBAL__sub_I__Z6test01v
  1243.         .section        .init_array,"aw"
  1244.         .align 8
  1245.         .quad        _GLOBAL__sub_I__Z6test01v
  1246.         .weak        __cxa_pure_virtual
  1247.         .hidden        __dso_handle
  1248.         .ident        "GCC: (GNU) 11.1.0"
  1249.         .section        .note.GNU-stack,"",@progbits
  1250. $
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 15:07:40 | 显示全部楼层
  1. $ cat main.cpp
  2. #include <iostream>

  3. using std::cout, std::endl;

  4. class A {
  5. public:
  6.     A() {cout << "A();" << endl;}
  7.     virtual ~A() {cout << "~A();" << endl;}
  8. };

  9. class B: public A {
  10. public:
  11.     B() {cout << "B();" << endl;}
  12.     ~B() {cout << "~B();" << endl;}
  13. };

  14. int main() {
  15.      A *a = new B;
  16.      delete a;
  17.     return 0;
  18. }
  19. $ g++ -Wall -S main.cpp
  20. $ g++ -Wall -o main main.s
  21. $ ./main
  22. A();
  23. B();
  24. ~B();
  25. ~A();
  26. $ cat main.s
  27.         .file        "main.cpp"
  28.         .text
  29.         .local        _ZStL8__ioinit
  30.         .comm        _ZStL8__ioinit,1,1
  31.         .section        .rodata
  32. .LC0:
  33.         .string        "A();"
  34.         .section        .text._ZN1AC2Ev,"axG",@progbits,_ZN1AC5Ev,comdat
  35.         .align 2
  36.         .weak        _ZN1AC2Ev
  37.         .type        _ZN1AC2Ev, @function
  38. _ZN1AC2Ev:
  39. .LFB1730:
  40.         .cfi_startproc
  41.         pushq        %rbp
  42.         .cfi_def_cfa_offset 16
  43.         .cfi_offset 6, -16
  44.         movq        %rsp, %rbp
  45.         .cfi_def_cfa_register 6
  46.         subq        $16, %rsp
  47.         movq        %rdi, -8(%rbp)
  48.         leaq        16+_ZTV1A(%rip), %rdx
  49.         movq        -8(%rbp), %rax
  50.         movq        %rdx, (%rax)
  51.         leaq        .LC0(%rip), %rax
  52.         movq        %rax, %rsi
  53.         leaq        _ZSt4cout(%rip), %rax
  54.         movq        %rax, %rdi
  55.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  56.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  57.         movq        %rdx, %rsi
  58.         movq        %rax, %rdi
  59.         call        _ZNSolsEPFRSoS_E@PLT
  60.         nop
  61.         leave
  62.         .cfi_def_cfa 7, 8
  63.         ret
  64.         .cfi_endproc
  65. .LFE1730:
  66.         .size        _ZN1AC2Ev, .-_ZN1AC2Ev
  67.         .weak        _ZN1AC1Ev
  68.         .set        _ZN1AC1Ev,_ZN1AC2Ev
  69.         .section        .rodata
  70. .LC1:
  71.         .string        "~A();"
  72.         .section        .text._ZN1AD2Ev,"axG",@progbits,_ZN1AD5Ev,comdat
  73.         .align 2
  74.         .weak        _ZN1AD2Ev
  75.         .type        _ZN1AD2Ev, @function
  76. _ZN1AD2Ev:
  77. .LFB1733:
  78.         .cfi_startproc
  79.         .cfi_personality 0x9b,DW.ref.__gxx_personality_v0
  80.         .cfi_lsda 0x1b,.LLSDA1733
  81.         pushq        %rbp
  82.         .cfi_def_cfa_offset 16
  83.         .cfi_offset 6, -16
  84.         movq        %rsp, %rbp
  85.         .cfi_def_cfa_register 6
  86.         subq        $16, %rsp
  87.         movq        %rdi, -8(%rbp)
  88.         leaq        16+_ZTV1A(%rip), %rdx
  89.         movq        -8(%rbp), %rax
  90.         movq        %rdx, (%rax)
  91.         leaq        .LC1(%rip), %rax
  92.         movq        %rax, %rsi
  93.         leaq        _ZSt4cout(%rip), %rax
  94.         movq        %rax, %rdi
  95.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  96.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  97.         movq        %rdx, %rsi
  98.         movq        %rax, %rdi
  99.         call        _ZNSolsEPFRSoS_E@PLT
  100.         nop
  101.         leave
  102.         .cfi_def_cfa 7, 8
  103.         ret
  104.         .cfi_endproc
  105. .LFE1733:
  106.         .globl        __gxx_personality_v0
  107.         .section        .gcc_except_table._ZN1AD2Ev,"aG",@progbits,_ZN1AD5Ev,comdat
  108. .LLSDA1733:
  109.         .byte        0xff
  110.         .byte        0xff
  111.         .byte        0x1
  112.         .uleb128 .LLSDACSE1733-.LLSDACSB1733
  113. .LLSDACSB1733:
  114. .LLSDACSE1733:
  115.         .section        .text._ZN1AD2Ev,"axG",@progbits,_ZN1AD5Ev,comdat
  116.         .size        _ZN1AD2Ev, .-_ZN1AD2Ev
  117.         .weak        _ZN1AD1Ev
  118.         .set        _ZN1AD1Ev,_ZN1AD2Ev
  119.         .section        .text._ZN1AD0Ev,"axG",@progbits,_ZN1AD5Ev,comdat
  120.         .align 2
  121.         .weak        _ZN1AD0Ev
  122.         .type        _ZN1AD0Ev, @function
  123. _ZN1AD0Ev:
  124. .LFB1735:
  125.         .cfi_startproc
  126.         pushq        %rbp
  127.         .cfi_def_cfa_offset 16
  128.         .cfi_offset 6, -16
  129.         movq        %rsp, %rbp
  130.         .cfi_def_cfa_register 6
  131.         subq        $16, %rsp
  132.         movq        %rdi, -8(%rbp)
  133.         movq        -8(%rbp), %rax
  134.         movq        %rax, %rdi
  135.         call        _ZN1AD1Ev
  136.         movq        -8(%rbp), %rax
  137.         movl        $8, %esi
  138.         movq        %rax, %rdi
  139.         call        _ZdlPvm@PLT
  140.         leave
  141.         .cfi_def_cfa 7, 8
  142.         ret
  143.         .cfi_endproc
  144. .LFE1735:
  145.         .size        _ZN1AD0Ev, .-_ZN1AD0Ev
  146.         .section        .rodata
  147. .LC2:
  148.         .string        "B();"
  149.         .section        .text._ZN1BC2Ev,"axG",@progbits,_ZN1BC5Ev,comdat
  150.         .align 2
  151.         .weak        _ZN1BC2Ev
  152.         .type        _ZN1BC2Ev, @function
  153. _ZN1BC2Ev:
  154. .LFB1737:
  155.         .cfi_startproc
  156.         .cfi_personality 0x9b,DW.ref.__gxx_personality_v0
  157.         .cfi_lsda 0x1b,.LLSDA1737
  158.         pushq        %rbp
  159.         .cfi_def_cfa_offset 16
  160.         .cfi_offset 6, -16
  161.         movq        %rsp, %rbp
  162.         .cfi_def_cfa_register 6
  163.         pushq        %rbx
  164.         subq        $24, %rsp
  165.         .cfi_offset 3, -24
  166.         movq        %rdi, -24(%rbp)
  167.         movq        -24(%rbp), %rax
  168.         movq        %rax, %rdi
  169. .LEHB0:
  170.         call        _ZN1AC2Ev
  171. .LEHE0:
  172.         leaq        16+_ZTV1B(%rip), %rdx
  173.         movq        -24(%rbp), %rax
  174.         movq        %rdx, (%rax)
  175.         leaq        .LC2(%rip), %rax
  176.         movq        %rax, %rsi
  177.         leaq        _ZSt4cout(%rip), %rax
  178.         movq        %rax, %rdi
  179. .LEHB1:
  180.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  181.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  182.         movq        %rdx, %rsi
  183.         movq        %rax, %rdi
  184.         call        _ZNSolsEPFRSoS_E@PLT
  185. .LEHE1:
  186.         jmp        .L7
  187. .L6:
  188.         movq        %rax, %rbx
  189.         movq        -24(%rbp), %rax
  190.         movq        %rax, %rdi
  191.         call        _ZN1AD2Ev
  192.         movq        %rbx, %rax
  193.         movq        %rax, %rdi
  194. .LEHB2:
  195.         call        _Unwind_Resume@PLT
  196. .LEHE2:
  197. .L7:
  198.         movq        -8(%rbp), %rbx
  199.         leave
  200.         .cfi_def_cfa 7, 8
  201.         ret
  202.         .cfi_endproc
  203. .LFE1737:
  204.         .section        .gcc_except_table._ZN1BC2Ev,"aG",@progbits,_ZN1BC5Ev,comdat
  205. .LLSDA1737:
  206.         .byte        0xff
  207.         .byte        0xff
  208.         .byte        0x1
  209.         .uleb128 .LLSDACSE1737-.LLSDACSB1737
  210. .LLSDACSB1737:
  211.         .uleb128 .LEHB0-.LFB1737
  212.         .uleb128 .LEHE0-.LEHB0
  213.         .uleb128 0
  214.         .uleb128 0
  215.         .uleb128 .LEHB1-.LFB1737
  216.         .uleb128 .LEHE1-.LEHB1
  217.         .uleb128 .L6-.LFB1737
  218.         .uleb128 0
  219.         .uleb128 .LEHB2-.LFB1737
  220.         .uleb128 .LEHE2-.LEHB2
  221.         .uleb128 0
  222.         .uleb128 0
  223. .LLSDACSE1737:
  224.         .section        .text._ZN1BC2Ev,"axG",@progbits,_ZN1BC5Ev,comdat
  225.         .size        _ZN1BC2Ev, .-_ZN1BC2Ev
  226.         .weak        _ZN1BC1Ev
  227.         .set        _ZN1BC1Ev,_ZN1BC2Ev
  228.         .section        .rodata
  229. .LC3:
  230.         .string        "~B();"
  231.         .section        .text._ZN1BD2Ev,"axG",@progbits,_ZN1BD5Ev,comdat
  232.         .align 2
  233.         .weak        _ZN1BD2Ev
  234.         .type        _ZN1BD2Ev, @function
  235. _ZN1BD2Ev:
  236. .LFB1740:
  237.         .cfi_startproc
  238.         .cfi_personality 0x9b,DW.ref.__gxx_personality_v0
  239.         .cfi_lsda 0x1b,.LLSDA1740
  240.         pushq        %rbp
  241.         .cfi_def_cfa_offset 16
  242.         .cfi_offset 6, -16
  243.         movq        %rsp, %rbp
  244.         .cfi_def_cfa_register 6
  245.         subq        $16, %rsp
  246.         movq        %rdi, -8(%rbp)
  247.         leaq        16+_ZTV1B(%rip), %rdx
  248.         movq        -8(%rbp), %rax
  249.         movq        %rdx, (%rax)
  250.         leaq        .LC3(%rip), %rax
  251.         movq        %rax, %rsi
  252.         leaq        _ZSt4cout(%rip), %rax
  253.         movq        %rax, %rdi
  254.         call        _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
  255.         movq        _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rdx
  256.         movq        %rdx, %rsi
  257.         movq        %rax, %rdi
  258.         call        _ZNSolsEPFRSoS_E@PLT
  259.         movq        -8(%rbp), %rax
  260.         movq        %rax, %rdi
  261.         call        _ZN1AD2Ev
  262.         nop
  263.         leave
  264.         .cfi_def_cfa 7, 8
  265.         ret
  266.         .cfi_endproc
  267. .LFE1740:
  268.         .section        .gcc_except_table._ZN1BD2Ev,"aG",@progbits,_ZN1BD5Ev,comdat
  269. .LLSDA1740:
  270.         .byte        0xff
  271.         .byte        0xff
  272.         .byte        0x1
  273.         .uleb128 .LLSDACSE1740-.LLSDACSB1740
  274. .LLSDACSB1740:
  275. .LLSDACSE1740:
  276.         .section        .text._ZN1BD2Ev,"axG",@progbits,_ZN1BD5Ev,comdat
  277.         .size        _ZN1BD2Ev, .-_ZN1BD2Ev
  278.         .weak        _ZN1BD1Ev
  279.         .set        _ZN1BD1Ev,_ZN1BD2Ev
  280.         .section        .text._ZN1BD0Ev,"axG",@progbits,_ZN1BD5Ev,comdat
  281.         .align 2
  282.         .weak        _ZN1BD0Ev
  283.         .type        _ZN1BD0Ev, @function
  284. _ZN1BD0Ev:
  285. .LFB1742:
  286.         .cfi_startproc
  287.         pushq        %rbp
  288.         .cfi_def_cfa_offset 16
  289.         .cfi_offset 6, -16
  290.         movq        %rsp, %rbp
  291.         .cfi_def_cfa_register 6
  292.         subq        $16, %rsp
  293.         movq        %rdi, -8(%rbp)
  294.         movq        -8(%rbp), %rax
  295.         movq        %rax, %rdi
  296.         call        _ZN1BD1Ev
  297.         movq        -8(%rbp), %rax
  298.         movl        $8, %esi
  299.         movq        %rax, %rdi
  300.         call        _ZdlPvm@PLT
  301.         leave
  302.         .cfi_def_cfa 7, 8
  303.         ret
  304.         .cfi_endproc
  305. .LFE1742:
  306.         .size        _ZN1BD0Ev, .-_ZN1BD0Ev
  307.         .text
  308.         .globl        main
  309.         .type        main, @function
  310. main:
  311. .LFB1743:
  312.         .cfi_startproc
  313.         .cfi_personality 0x9b,DW.ref.__gxx_personality_v0
  314.         .cfi_lsda 0x1b,.LLSDA1743
  315.         pushq        %rbp
  316.         .cfi_def_cfa_offset 16
  317.         .cfi_offset 6, -16
  318.         movq        %rsp, %rbp
  319.         .cfi_def_cfa_register 6
  320.         pushq        %r12
  321.         pushq        %rbx
  322.         subq        $16, %rsp
  323.         .cfi_offset 12, -24
  324.         .cfi_offset 3, -32
  325.         movl        $8, %edi
  326. .LEHB3:
  327.         call        _Znwm@PLT
  328. .LEHE3:
  329.         movq        %rax, %rbx
  330.         movq        %rbx, %rdi
  331. .LEHB4:
  332.         call        _ZN1BC1Ev
  333. .LEHE4:
  334.         movq        %rbx, -24(%rbp)
  335.         movq        -24(%rbp), %rax
  336.         testq        %rax, %rax
  337.         je        .L11
  338.         movq        (%rax), %rdx
  339.         addq        $8, %rdx
  340.         movq        (%rdx), %rdx
  341.         movq        %rax, %rdi
  342.         call        *%rdx
  343. .L11:
  344.         movl        $0, %eax
  345.         jmp        .L15
  346. .L14:
  347.         movq        %rax, %r12
  348.         movl        $8, %esi
  349.         movq        %rbx, %rdi
  350.         call        _ZdlPvm@PLT
  351.         movq        %r12, %rax
  352.         movq        %rax, %rdi
  353. .LEHB5:
  354.         call        _Unwind_Resume@PLT
  355. .LEHE5:
  356. .L15:
  357.         addq        $16, %rsp
  358.         popq        %rbx
  359.         popq        %r12
  360.         popq        %rbp
  361.         .cfi_def_cfa 7, 8
  362.         ret
  363.         .cfi_endproc
  364. .LFE1743:
  365.         .section        .gcc_except_table,"a",@progbits
  366. .LLSDA1743:
  367.         .byte        0xff
  368.         .byte        0xff
  369.         .byte        0x1
  370.         .uleb128 .LLSDACSE1743-.LLSDACSB1743
  371. .LLSDACSB1743:
  372.         .uleb128 .LEHB3-.LFB1743
  373.         .uleb128 .LEHE3-.LEHB3
  374.         .uleb128 0
  375.         .uleb128 0
  376.         .uleb128 .LEHB4-.LFB1743
  377.         .uleb128 .LEHE4-.LEHB4
  378.         .uleb128 .L14-.LFB1743
  379.         .uleb128 0
  380.         .uleb128 .LEHB5-.LFB1743
  381.         .uleb128 .LEHE5-.LEHB5
  382.         .uleb128 0
  383.         .uleb128 0
  384. .LLSDACSE1743:
  385.         .text
  386.         .size        main, .-main
  387.         .weak        _ZTV1B
  388.         .section        .data.rel.ro.local._ZTV1B,"awG",@progbits,_ZTV1B,comdat
  389.         .align 8
  390.         .type        _ZTV1B, @object
  391.         .size        _ZTV1B, 32
  392. _ZTV1B:
  393.         .quad        0
  394.         .quad        _ZTI1B
  395.         .quad        _ZN1BD1Ev
  396.         .quad        _ZN1BD0Ev
  397.         .weak        _ZTV1A
  398.         .section        .data.rel.ro.local._ZTV1A,"awG",@progbits,_ZTV1A,comdat
  399.         .align 8
  400.         .type        _ZTV1A, @object
  401.         .size        _ZTV1A, 32
  402. _ZTV1A:
  403.         .quad        0
  404.         .quad        _ZTI1A
  405.         .quad        _ZN1AD1Ev
  406.         .quad        _ZN1AD0Ev
  407.         .weak        _ZTI1B
  408.         .section        .data.rel.ro._ZTI1B,"awG",@progbits,_ZTI1B,comdat
  409.         .align 8
  410.         .type        _ZTI1B, @object
  411.         .size        _ZTI1B, 24
  412. _ZTI1B:
  413.         .quad        _ZTVN10__cxxabiv120__si_class_type_infoE+16
  414.         .quad        _ZTS1B
  415.         .quad        _ZTI1A
  416.         .weak        _ZTS1B
  417.         .section        .rodata._ZTS1B,"aG",@progbits,_ZTS1B,comdat
  418.         .type        _ZTS1B, @object
  419.         .size        _ZTS1B, 3
  420. _ZTS1B:
  421.         .string        "1B"
  422.         .weak        _ZTI1A
  423.         .section        .data.rel.ro._ZTI1A,"awG",@progbits,_ZTI1A,comdat
  424.         .align 8
  425.         .type        _ZTI1A, @object
  426.         .size        _ZTI1A, 16
  427. _ZTI1A:
  428.         .quad        _ZTVN10__cxxabiv117__class_type_infoE+16
  429.         .quad        _ZTS1A
  430.         .weak        _ZTS1A
  431.         .section        .rodata._ZTS1A,"aG",@progbits,_ZTS1A,comdat
  432.         .type        _ZTS1A, @object
  433.         .size        _ZTS1A, 3
  434. _ZTS1A:
  435.         .string        "1A"
  436.         .text
  437.         .type        _Z41__static_initialization_and_destruction_0ii, @function
  438. _Z41__static_initialization_and_destruction_0ii:
  439. .LFB2246:
  440.         .cfi_startproc
  441.         pushq        %rbp
  442.         .cfi_def_cfa_offset 16
  443.         .cfi_offset 6, -16
  444.         movq        %rsp, %rbp
  445.         .cfi_def_cfa_register 6
  446.         subq        $16, %rsp
  447.         movl        %edi, -4(%rbp)
  448.         movl        %esi, -8(%rbp)
  449.         cmpl        $1, -4(%rbp)
  450.         jne        .L18
  451.         cmpl        $65535, -8(%rbp)
  452.         jne        .L18
  453.         leaq        _ZStL8__ioinit(%rip), %rax
  454.         movq        %rax, %rdi
  455.         call        _ZNSt8ios_base4InitC1Ev@PLT
  456.         leaq        __dso_handle(%rip), %rax
  457.         movq        %rax, %rdx
  458.         leaq        _ZStL8__ioinit(%rip), %rax
  459.         movq        %rax, %rsi
  460.         movq        _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rax
  461.         movq        %rax, %rdi
  462.         call        __cxa_atexit@PLT
  463. .L18:
  464.         nop
  465.         leave
  466.         .cfi_def_cfa 7, 8
  467.         ret
  468.         .cfi_endproc
  469. .LFE2246:
  470.         .size        _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
  471.         .type        _GLOBAL__sub_I_main, @function
  472. _GLOBAL__sub_I_main:
  473. .LFB2247:
  474.         .cfi_startproc
  475.         pushq        %rbp
  476.         .cfi_def_cfa_offset 16
  477.         .cfi_offset 6, -16
  478.         movq        %rsp, %rbp
  479.         .cfi_def_cfa_register 6
  480.         movl        $65535, %esi
  481.         movl        $1, %edi
  482.         call        _Z41__static_initialization_and_destruction_0ii
  483.         popq        %rbp
  484.         .cfi_def_cfa 7, 8
  485.         ret
  486.         .cfi_endproc
  487. .LFE2247:
  488.         .size        _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main
  489.         .section        .init_array,"aw"
  490.         .align 8
  491.         .quad        _GLOBAL__sub_I_main
  492.         .hidden        DW.ref.__gxx_personality_v0
  493.         .weak        DW.ref.__gxx_personality_v0
  494.         .section        .data.rel.local.DW.ref.__gxx_personality_v0,"awG",@progbits,DW.ref.__gxx_personality_v0,comdat
  495.         .align 8
  496.         .type        DW.ref.__gxx_personality_v0, @object
  497.         .size        DW.ref.__gxx_personality_v0, 8
  498. DW.ref.__gxx_personality_v0:
  499.         .quad        __gxx_personality_v0
  500.         .hidden        __dso_handle
  501.         .ident        "GCC: (GNU) 11.1.0"
  502.         .section        .note.GNU-stack,"",@progbits
  503. $
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 15:11:02 | 显示全部楼层
  1. $ cat main.cpp
  2. #include <iostream>

  3. using std::cout, std::endl;

  4. class A {
  5. public:
  6.     A() {cout << "A();" << endl;}
  7.     virtual ~A() {cout << "~A();" << endl;}
  8. };

  9. class B: public A {
  10. public:
  11.     B() {cout << "B();" << endl;}
  12.     ~B() {cout << "~B();" << endl;}
  13. };

  14. int main() {
  15.     cout << "1: A *a = new B;" << endl;
  16.      A *a = new B;
  17.     cout << "2: A *a = new B;" << endl;
  18.     cout << "3: delete a;" << endl;
  19.      delete a;
  20.     cout << "4: delete a;" << endl;
  21.     return 0;
  22. }
  23. $ g++-debug -o main main.cpp
  24. $ ./main
  25. 1: A *a = new B;
  26. A();
  27. B();
  28. 2: A *a = new B;
  29. 3: delete a;
  30. ~B();
  31. ~A();
  32. 4: delete a;
  33. $
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表