new,关于effectivec++20页内容来个总结1
2016-04-21 09:37
453 查看
关于new_handler,绝对是陌生的,想起之前放弃的MFC中的句柄的概念,觉得差不多,就是操作的new的一种工具,而那个句柄就是一个int,这个就是一个函数指针
主意:c++不支持定义自己的new_handler,其实也没有必要,因为完全可以通过set_new_handler
与之关系密切的 set_new_handler,他总是指向new分配失败时的那个函数,返回一个new_handler
用以更新 new_handler
new_handler 只是一个类型,记住,太容易骗人了。
我们没办法获得一个new_handler,只能通过std::set_new_handler来取得,其实在意义就是你写一个差错处理程序,当你想在new循环中换另一个程序来处理,这时你应该使用std::set_new_handler,只有他能帮助你取得下一个程序的指针。
认识了
主意:c++不支持定义自己的new_handler,其实也没有必要,因为完全可以通过set_new_handler
typedef void (*new_handler)();//new_handler
与之关系密切的 set_new_handler,他总是指向new分配失败时的那个函数,返回一个new_handler
new_handler set_new_handler (new_handler);
用以更新 new_handler
#include <iostream> #include <new> void outofMem()//书上一例子 { std::cerr<< "out of memory" << std::endl; abort(); } int main(){ std::set_new_handler(outofMem()); int* bigArray = new int[1000000000L]; return 0; }
operator new 的伪码: void* operator new (std::size_t size)throw(std::bad_alloc) { if(size == 0) size = 1; while(true) if(成功分配) return(one pointer to a memory) else std::new_handler golbal handler = std::set_new_handler(0);//卸载 std::set_new_handler(std::new_handler);//安装 if(golbalHandler)(*golbalHandler)(); //觉得跟if(!p)差不多 else throw std::bad_alloc(); }
new_handler 只是一个类型,记住,太容易骗人了。
我们没办法获得一个new_handler,只能通过std::set_new_handler来取得,其实在意义就是你写一个差错处理程序,当你想在new循环中换另一个程序来处理,这时你应该使用std::set_new_handler,只有他能帮助你取得下一个程序的指针。
认识了
相关文章推荐
- C++实验四—分数的累加
- c++上机实验4项目1-求1000内偶数的
- c++实验四 项目一
- c++实验4-求1000以内所有偶数的和
- C++实验4-穷举法解决组合问题
- C++作业4
- c++实验4-百钱百鸡问题
- C++作业4
- C++实验4——分数的累加
- C++:invalid conversion from 'unsigned char *' to 'const char *'
- C++ 覆盖 重载 隐藏 override overload hidden
- C++实验四—乘法口诀表
- c++实验4 项目一 1000以内所有偶数之和
- C++实验4——乘法口诀表
- C++实验4--1利用循环求和
- c++作业4
- C++数组声明的方式
- c++第四次实验——贪财的富翁
- C++走向远洋——37(工资类,2)
- C++上机实验4项目1-利用循环求和