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

它只是一个很简单的道理,真的,相信我。

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

写operator new和operator delete时要遵循常规

自己重写operator new时(如果写了operator new就要同时写operator delete解释了为什么有时要重写它),很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来也就是:要有正确的返回值;可用内存不够时要调用出错处理函数(见预先准备好内存不够的情况);处理好0字节内存请求的情况。此外,还要避免不小心隐藏了标准形式的new,不过这是(避免隐藏标准形式的new)的话题。 继续阅读写operator new和operator delete时要遵循常规

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

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