zoukankan      html  css  js  c++  java
  • new操作符(new operator) 和 new操作(operator new)的区别。 GIS

    当你写这样的代码: string *ps = new string("Memory Management");
    你使用的 new 是 new 操作符。这个操作符就象 sizeof 一样是语言内置的,你不能改变它的含义,它的功能总是一样的。它要完成的功能分成两部分。第一部分是分配足够的内存以便
    容纳所需类型的对象。第二部分是它调用构造函数初始化内存中的对象。new操作符总是做这两件事情,你不能以任何方式改变它的行为。

    你所能改变的是如何为对象分配内存。new 操作符调用一个函数完成必需的内存分配,你能够重写或重载这个函数来改变它的行为。new 操作符为分配内存所调用函数的名字是 operator new

     

    函数 operator new 通常这样声明:
    void * operator new(size_t size); //参数 size_t确定分配多少内存
    返回值类型是 void*,因为这个函数返回一个未经处理(raw)的指针,未初始化的内存

    你一般不会直接调用 operator new,但是一旦这么做,你可以象调用其它函数一样调用它:
    void *rawMemory = operator new(sizeof(string));

    操作符operator new将返回一个指针, 指向一块足够容纳一个string类型对象的内存。
    就象 malloc 一样,operator new 的职责只是分配内存。它对构造函数一无所知。operator new所了解的是内存分配

    void *memory = // 得到未经处理的内存
    operator new(sizeof(string)); // 为 String对象
    call string::string("Memory Management") //初始化
    on *memory; // 内存中 // 的对象
    string *ps = // 是 ps指针指向
    static_cast<string*>(memory); // 新的对象

     

  • 相关阅读:
    异常:调用链顺序
    日志分割建议
    java异常处理规范
    忽略字母大小写情况下统计字符出现的次数
    十六进制转化为十进制
    搜索(剪枝优化):HDU 5113 Black And White
    水题:HDU 5112 A Curious Matt
    综合(奇技淫巧):HDU 5118 GRE Words Once More!
    网络流(费用流)CodeForces 321B:Ciel and Duel
    数学(概率)CodeForces 626D:Jerry's Protest
  • 原文地址:https://www.cnblogs.com/gisbeginner/p/2767526.html
Copyright © 2011-2022 走看看