您的位置:首页 > 编程语言 > C语言/C++

C++中new的用法

2013-05-02 08:52 176 查看
具体参考 《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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: