C++中new的用法

具体参考 《C++之 new 》http://www.cnblogs.com/yzy6806555/archive/2013/02/24/2924571.html
在 C++ 中new有两种身份,一种是关键字,身份与sizeof等同,内置的;另外一种是函数。

1. new作为关键字是最常见的用法。
Class* ptr = new Class("rui");
这句话会完成两个功能:
a)调用operator new为类分配空间
b)调用Class的对应的构造函数(例子中有参数)。
在第二个过程中,如果发生异常(如读取丢失文件),那么可能会发生内存泄露。所以Symbian中有
两段构造的解决方案(具体请google一下)。
 
2. new作为函数不太常用,也不推荐使用。主要有两种用法
1) 为类分配内存,其函数声明为
void *operator new(size_t size);
之前介绍的只在栈上生成对象就是声明类的new函数为private。
其为 关键字new的第一个调用过程。new函数返回的是一个void指针,一块未经初始化的内存
2)在已有的内存上(可以是堆内存或栈内存)分配对象,也称为placement new。其声明为
void* operator new (std::size_t size, void* ptr) throw();
可以看到其只是operator new 的一个重载版本 (多了个参数)。
其会调用类的构造函数,初始化内存,作为关键字new的第二个过程。
placement new主要适用于:
a)在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;
b)长时间运行而不被打断的程序;
c)以及执行一个垃圾收集器 (garbage collector)。

posted @ 2013-05-02 08:52  westfly  阅读(376)  评论(0编辑  收藏  举报