定位new

作者: 红茶ovo | 来源:发表于2017-05-16 20:20 被阅读0次

    在c++中使用new表达式时实际是执行了3步

    1. new表达式调用一个名为 operator new(或者 operator new[])的标准库函数。该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象数组)
    2. 编译器运行相应的构造函数以构造这些对象,并为其传入初始值
    3. 对象被分配了空间并构造完成,返回一个只想该对象的指针

    使用delete表达式时实际执行了2步

    1. 对指针所指向的对象或数组中的元素执行对应的析构函数
    2. 编译器调用名为 operator delete(或者 operator delete[])的标准库函数释放内存空间

    可以重载 operator new 和 operator delete 以达到控制内存分配的过程,但

    void operator new(size_t, void*);

    是不允许重载的,只供标准库使用。(以上参考自c++ primer)

    相关文章

      网友评论

          本文标题:定位new

          本文链接:https://www.haomeiwen.com/subject/vyfrxxtx.html