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); // 新的对象

 

原文地址:https://www.cnblogs.com/gisbeginner/p/2767526.html