new & malloc()

来源:互联网 发布:iphone软件更新后闪退 编辑:程序博客网 时间:2024/06/05 11:37

new 是一个运算符,是在编译的时候可以确定数据类型, 所以,new需要关心操作对象的数据类型,调用该类型的初始化函数。


malloc()是一个函数,是在运行的时候起作用, malloc()函数只关心内存大小参数,至于这个内存放置什么数据结构,malloc()不关心.


由于new 和 malloc() 的特性,决定了在对象初始化方面的不同用处. 

 

在more effective c++中,想必大家看到过这样的说法,operator new() 和 new operator 不是一个概念,


operator new() 是函数调用, 可以被重载, 它的完整形式是 void * operator new(size_t cb);


new operator 字面意思说啊,这个new是一个运算符。由c++编译器来解释它的丰富含义,实际上,它的丰富含义就是: 调用前面的 void * operator new(size_t cb)来分配一个空间,再用返回的这个指针值作为参数来调用对象的构造函数,使用__thiscall调用约定, this的值就是这个地址指针,通过ecx来传递的(vc++编译器)。

 

你可以重载void * operator new (size_t cb); 你设置可以给特定的类定义各自的内存分配函数void * operator new (size_t cb); 

比如说: 

 

另外还有一种叫做  replacement new, 就是程序自己来分配一个空间(比如说在栈上),然后将这个指针交给 replacement  new 来调用构造函数,进而进行对象初始化。使用方式: 

 

原创粉丝点击