如何写出高效C++(定制new和delete和杂项讨论)

来源:互联网 发布:java如何实现线程同步 编辑:程序博客网 时间:2024/05/29 11:10

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

















0 0
原创粉丝点击