千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用

先看第一种情况:返回一个局部对象的引用。它的问题在于,局部对象 —– 顾名思义 —- 仅仅是局部的。也就是说,局部对象是在被定义时创建,在离开生命空间时被销毁的。所谓生命空间,是指它们所在的函数体。当函数返回时,程序的控制离开了这个空间,所以函数内部所有的局部对象被自动销毁。因此,如果返回局部对象的引用,那个局部对象其实已经在函数调用者使用它之前被销毁了。

如果写了operator new就要同时写operator delete

让我们回过头去看看这样一个基本问题:为什么有必要写自己的operator new和operator delete?

答案通常是:为了效率。缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里,情况更是如此。

“new”和“malloc()”的不同点

“malloc()”是个函数,接受(字节)数目作为参数;它返回一个指向未初始化空间的 void * 指针。“new”是个运算符,接受一个类型以及一套该类型的初始值(可选)作为参数;它返回一个指向已被初始化(可选)的该类型的对象的指针。当你想为带有非平凡初始化语义(non-trivial initialization semantics)的用户自定义类型分配空间时,这两者的区别是很明显的。