C++ new

new的过程

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:

  1. class A
  2. {
  3. int i;
  4. public:
  5. A( int _i) :i(_i*_i) {}
  6. void Say() { printf( "i=%d\n", i); }
  7. };
  8. //调用new:
  9. A* pa = new A( 3);

那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):

  1. A* pa = (A*) malloc( sizeof(A));
  2. pa->A::A( 3);
  3. return pa;

虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。因此我们还是要尽可能的使用new,除非有一些特殊的需求。

猜你喜欢

转载自blog.csdn.net/qq_40213457/article/details/80899513