zoukankan      html  css  js  c++  java
  • 定位操作符new()的理解

    class Screen {
    public:
    void *operator new( size_t );
    void *operator new( size_t, Screen* );
    // ...
    };
    额外的参数可以被new 表达式中指定的定位实参初始化例如
    void func( Screen *start ) {
    Screen *ps = new (start) Screen;
    // ...
    }

    “new (start) Screen;”
    这是定位new操作

    Screen *ps = new (start) Screen;
    表示在已经开辟好的内存区start中为堆对象Screen申请一个内存

    也就是说,如果start占100个字节
    你现在从它的第1个字节开始,往里面写入Screen

    这样做今后要释放内存的时候有麻烦,如果Screen里面有指针,并开辟了空间,那么delete ps会调用析构函数,而start中的那块内存也丢失了,因为ps也指向了start.所以要避免这种情况,就要先ps->~Screen( )这样显示的调用Screen的析构函数,再delete [ ]start
     

  • 相关阅读:
    javajava.lang.reflect.Array
    基于annotation的spring注入
    jquery插件
    spring的注入方式
    jqueryajax
    javascript基础
    xml基础
    js 获取FCKeditor 值
    TSQL 解析xml
    Linq
  • 原文地址:https://www.cnblogs.com/secbook/p/2655481.html
Copyright © 2011-2022 走看看