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进行初始化内存的对象,应该在对象释放前主动调用其析构函数!然后再释放内存。

  • 相关阅读:
    HTML JS 数据校验
    算法: 实现LRU缓存,读取、写入O(1)实现
    C/C++ 二维数组
    tmux 终端分屏利器使用
    关于Apache Tomcat存在文件包含漏洞的安全公告
    SQLSERVER触发器触发INSERT,UPDATE,DELETE三种状态
    SQL Server 触发器
    SQL Server游标
    SQL Server基础之游标
    阿里maven镜像配置
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/6368856.html
Copyright © 2011-2022 走看看