zoukankan      html  css  js  c++  java
  • operator new和placement new

    new operator是new函数,有以下两个过程

    1. 调用operator new分配空间

    2. 调用构造函数

    其中operator new是可以被重载的,每一个类都可以重载自己的operator new

    placement new可以解决没有默认构造函数的情况,也可以用来减少malloc的开销

    placement new的用法如下

    /// 首先调用operator new开出一块内存

    void *p = ::operator new(sizeof(Foo));

    /// 然后用placement new就可以调用带参数的构造函数

    Foo *foo = new(p) Foo(1);

    placement new带的参数是一个指针,这个指针指向了之前分配好的一块空间,用operator new就可以

    它所做的事情就是返回这个指针,后面跟踪进去的时候不知道为什么进入了Foo的构造函数,很神奇!想知道原因大概要看汇编了,不明白为什么,但总之能够调用带参数的构造函数了

    下面是测试代码

    #include <new>
    #include <iostream>
    
    using namespace std;
    
    class Foo{
    public:
        Foo(int i){
            cout << i << endl;
        }
    };
    
    int main(){
        void *buff = ::operator new(128);
        Foo *foo = new(buff) Foo(1);
    
        return 0;
    }
  • 相关阅读:
    实验室资质认定评审准则和要素及要点
    如何进行内审?
    实验室比对结果评价的3种方法
    第一次如何申请CNAS实验室认可资质
    风险评估的实施步骤
    Servlet
    CMMI_SCAMPY评估方法
    PHP_2
    PHP_1
    java中String与StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/EpisodeXI/p/4182189.html
Copyright © 2011-2022 走看看