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

  • 相关阅读:
    [转]HDR渲染器的实现(基于OpenGL)
    32位微机的内存管理模式
    王爽汇编检测点1.1
    标志位的说明
    通用寄存器的作用
    Debug初次使用
    昨天纠结了一天要始学习dos汇编还是win32汇编,终于想通了
    CPU对存储器的读写(二、数据总线、控制总线)
    CPU对存储器的读写(一、地址总线)
    段寄存器的引用
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/6368856.html
Copyright © 2011-2022 走看看