49.了解new-handle的行为
set_new_handler允许客户制定一个函数,在内存分配无法获得满足时被调用。
void outOfMem()
{
std::cerr<<"Unable to satisfy request for memory\n";
std::abort();
}
int main()
{
std::set_new_handler(outOfMem);
int* pBigDataArray = new int[10000000000L];
}
如此在内存分配不足的时候就会调用outOfMem函数。
50.了解new和delete的合理替换时机
对于编译器默认给予的new和delete,因为是编译器之前就写好的,所以有时候过于死板,这种时候为了能够让我们的程序更高效,我们可以考虑自己写new和delete来替换,而且自己写的new和delete还可以检测错误,强化效能,手机使用上的统计数据等等作用。
51.编写new和delete时需要固守常规。
new的规则:
(1)应该内含一个无穷循环
(2)如果在无穷循环中一直不满足内存需求就一直调用new-handle
(3)要有能力处理0bytes操作(可以就把它当作1来操作)
(4)class的专属版本还应该处理比正确大小更大的错误,这时候可以考虑去调用标准版本的new去实现。
delete的规则:
(1)收到null指针时什么也不做
(2)处理比正确大小更大的错误申请(标准delete)
52.写了placement new也要写placement delete
最后一章~一鼓作气地搞定他
53.不要轻忽编译器的警告
最好让你的代码争取到没有任何警告。
还有不同的编译器可能对同一件事物发出不同的警告或者忽视他。
54:让自己熟悉包括TR1在内的标准程序库
55.让自己熟悉boost