zoukankan      html  css  js  c++  java
  • 不同意义的new和delete

    1,new operator

    2,operator new (即new expression)

    3,Placement new

    new operator :

    string *ps = new string(“memory”);
    

    以上动作实际做了两件事:

    1,分配足够的内存。
    
    2,调用一个constructor为刚分配的内存中的那个对象设定初值。
    

    operator new :

    通用声明:
    
    
    
    void * operator new(size_t size);
    

    函数里面具体是做什么,就看你的了,基本上都是直接返回一个原始的、未设置初值的内存。

    可以这样调用:

    void * tp = operator new(sizeof(string));
    

    Placement new:

    针对一个已存在的对象调用其constructor。
    

    使用举例:

    class Dog{
    
    Dog(int dogsize);
    
    .......};
    
    Dog* constructorDogInBuffer(void* buff, int dogsize)
    
    {
    
        return new (buff) Dog(dogsize);
    
    }
    

    //---------------------------------delete分割线-----------------------------------------//

    1,operator delete

    2,delete operator

    operator delete:

    通常声明:

    void operator delete(void *momery);    
    

    与operator new搭配使用:

    string *ps = new string("data");
    
    delete ps;
    

    最后一个动作实际是分解成两步操作:

    ps->~string();                //调用对象析构函数
    
    operator delete(ps);      //释放内存
    

    operator delete:

    处理原始的,未设置初值的内存进行释放。
    
    与operator new 搭配使用。这两个操作相当于C的malloc和free。
    

    对于使用Placement new进行初始化内存的对象,应该在对象释放前主动调用其析构函数!然后再释放内存。

  • 相关阅读:
    UI自动化实现多浏览器运行
    【转】C#操作XML方法集合
    日拱一卒
    敏捷开发- planning会议中的开会趣事
    敏捷开发- 可行走的骨骼
    敏捷开发- 测试人员何去何从
    Nunit & Specflow
    [转]根本原因分析(Root Cause Analysis)
    Selenium 中抓取dropdown
    网页模板
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/6368856.html
Copyright © 2011-2022 走看看