• C++中的new、operator new、placement new


    操作符new

    如果执行以下语句:

    A* a = new A();

    C++会执行以下两个步骤

    1.调用operator new(这是一个函数,全局有一个定义,也可以在类中重载)分配内存。

    2.调用A的构造函数。

    类似的,操作符delete会先调用析构函数,再调用operator delete释放内存。

    重载operator new

    class A{
    public:
        void* operator new(size_t size)
        {
            std::cout << "A::operator new" << std::endl;
            return malloc(size);
        }
    };

    ps: 使用::operator new可以指定使用全局的operator new函数。

    placement new

    placement new事实上不分配内存,它会根据传入的ptr来构造对象。

    1.预先分配内存

    char * buff = new [sizeof(A)];  // 也可以在栈中分配

    2.调用placement new构造对象

    A *a = new (buf) A

    ps:在使用完后记得手动释放内存跟调用相应的析构函数。

  • 相关阅读:
    2019-8-31-dotnet-新项目格式与对应框架预定义的宏
    2018-10-31-C#-程序内的类数量对程序启动的影响
    位域
    free命令
    lsof命令
    Linux挂载Windows文件夹
    Source Insight用法
    预处理命令
    QMessageBox
    QComboBox
  • 原文地址:https://www.cnblogs.com/runnyu/p/5973913.html
Copyright © 2020-2023  润新知