关于c++的new的剖析
来源:互联网 发布:游族网络定增公告 编辑:程序博客网 时间:2024/04/29 04:04
声明数组时class a=new class[];
则释放的时候一定要delete[] a,虽然delete a不会编译报错,但当数据类型是简单类型时没有什么问题,但是复杂类型时就无法释放数组后面的实例,因为delete[]会一次调用数组中对象的析构函数。。。。
当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:
class A
{
int i;
public:
A(int _i) :i(_i*_i) {}
void Say() { printf("i=%dn", i); }
};
//调用new:
A* pa = new A(3);
那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):
A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;
虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。因此我们还是要尽可能的使用new,除非有一些特殊的需求。
new的三种形态
到目前为止,本文所提到的new都是指的“new operator”或称为“new expression”,但事实上在C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new。
详细请见
http://blog.163.com/198704126312feng/blog/static/552483782008112273156413/
- 关于c++的new的剖析
- new和malloc的剖析
- 关于NEW的解析
- 关于new的讨论
- C++的new和delete剖析
- C++new的用法
- C++new的用法
- C++new的用法
- C++new的用法
- C ++的new、delete
- C++new的用法
- C++new的用法
- c++new的用法
- 关于《C语言深度剖析》之编译器的bug问题
- 关于C语言相关操作符的个人剖析
- [C++] c++ new() 与new[]的区别
- C#new与不new的差别
- 关于new的一点笔记
- JavaScript中另类遍历数组
- 事务策略: 高并发策略
- ASP动态网站防止被人黑的方法
- 两个故事
- Visual Studio 2008 和 .net 3.5新特性
- 关于c++的new的剖析
- JFreeChart柱状图的类的封装
- NetBeans IDE 6.8 里程碑 2 已经可用!
- 详解C语言中的lib文件以及tlib命令
- SQL过滤
- 可重入函数
- CSS基础学习
- 收藏
- Android线程模型(Painless Threading)