当使用new关键字在堆上动态创建一个对象时,做了三件事情:开辟一块空间、调用构造函数、返回正确的指针。如果创建的对象时简单类型的变量,第二步会被省略。
//调用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 operator、operator new、placement new
待续。。。
参考:
https://blog.csdn.net/u011939264/article/details/52858432