zoukankan      html  css  js  c++  java
  • [C++] 关于delete和delete[]

    首先贴一段MFC的源代码:

    void __cdecl operator delete(void* p)
    {
            free(p);
    }

    void __cdecl operator delete[](void* p)
    {
        ::operator delete(p);
    }

    然后贴一点汇编:

    分析:

    其中的call operator delete (4051C1h) 就是去调用MFC的void __cdecl operator delete(void* p)

    其中的call operator delete[] (4051CBh) 就是去调用MFC的void __cdecl operator delete[](void* p)

    所以在这种情下,两者是完全等效的。

    分析:

    其中的call  A::`scalar deleting destructor' (402EA0h) 会call A::~A (402E00h) 然后call operator delete (4051C1h)

    其中的call  A::`vector deleting destructor' (402E20h)会循环的为每个对象call  `eh vector destructor iterator' (443C7Dh) 循环结束之后call operator delete[] (4051CBh)

    结论:

    1,对于char这样的基础数据类型,delete和delete[]是等价的。

    2,对于class A这样带析构函数的类型,delete和delete[]是不同的。

    3,如果只有一个对象,那么对象数组在逻辑上可以蜕化成一个对象,但是那样会多一些步骤,性能会稍差一些。这大概是C++需要同时保留delete和delete[]的原因。

  • 相关阅读:
    Less与Sass
    JQuery基础
    JS中DOM以及BOM
    JS函数入门
    JS入门
    响应式布局和弹性布局,移动开发常用技巧
    CSS基础1
    H5入门
    error C2143: syntax error : missing ';' before 'type'
    Windows系统下nodejs安装及配置
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330421.html
Copyright © 2011-2022 走看看