关于C++的new关键字

阅读STL源码,空间配置器(allocate)的实

 

关于C++的new关键字

我们发现,它并没有使用关键字new,而是调用::Operator new 分配内存。其实, 当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:

获得一块内存空间、

调用构造函数

、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。

class A
{
   int i;
public:
   A(int _i) :i(_i*_i) {}
   void Say()  { printf("i=%d/n", 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,除非有一些特殊的需求。