Effective C++实践

来源:互联网 发布:win10电脑无法识别网络 编辑:程序博客网 时间:2024/06/07 15:32

在C++编程中,new是可能会造成异常的,噢列个去,刚学习到这儿,不禁汗流浃背,以前写代码哪注意到这?!了解完C++的特点,才发现C++真的到处是坑爹的坑...

解决方法是使用set_new_handler函数调用客户定义的new_handler函数。书上网上都找了些例子,可总是编译不过,老是提示参数不对。想明白了,其实就是返回值定义错误。<new>中的定义如下:

  typedef void (*new_handler)();

new_handler set_new_handler(new_handler) throw();

所以示例代码应该这样写:

main.cpp文件

#include <iostream>
#include <new>
#include <cstdlib>



using namespace std;

/// 此处为std::new_handler 而非void
std::new_handler noMoreMemory()
{
    cerr << "Unable to satisfy request for memory\n";
    abort();
}


int main()
{
    set_new_handler(noMoreMemory());
    int *pBigArray = new int[100000000];
    delete pBigArray;
    return 0;

}

现在真对以前写的代码抱有罪恶感了尴尬

原创粉丝点击