参加csdn论坛 无论如何,检查new是否失败通常都没多大意义。
这种说法可能会令一些人大吃一惊。
有些人可能会义正词严地问:“你怎么能建议我们不去检查new是否失败了呢?难道这种检查不重要?!错误检查是程序健壮性的基石呀!”
是的,我承认一般情况下的确是这样, 但可惜的是, 由于内存分配的特殊性, 对于new来说失败检查往往是无意义的,这跟其他类型的操作不同,后者的失败可能的确应当被检查并处理。
这种说法可能会令一些人大吃一惊。
有些人可能会义正词严地问:“你怎么能建议我们不去检查new是否失败了呢?难道这种检查不重要?!错误检查是程序健壮性的基石呀!”
是的,我承认一般情况下的确是这样, 但可惜的是, 由于内存分配的特殊性, 对于new来说失败检查往往是无意义的,这跟其他类型的操作不同,后者的失败可能的确应当被检查并处理。
2016-07-23
Exceptional C++ Style中文版 150页 作者 Herb Sutter
记住,无论如何,检查new是否失败几乎是没有什么意义的,原因有若干。
如果你理当关心内存耗尽的话,请确保你正在检查的是你所认为你正在检查的,因为:
1.在那些知道内存被用到时才去提交实际内存的系统之上,检查new失败通常是没有意义的。
2.在拥有虚拟内存的系统那个上,new失败几乎不会发生,因为早在虚拟内存耗尽之前,系统通常就已经开始颠簸了,而此时系统管理员自然会杀掉一些进程。
3.除了一些特殊情况之外,通常即便你检测到了new失败,要是真的没有内存剩下的话,那么你就做不了什么了。
记住,无论如何,检查new是否失败几乎是没有什么意义的,原因有若干。
如果你理当关心内存耗尽的话,请确保你正在检查的是你所认为你正在检查的,因为:
1.在那些知道内存被用到时才去提交实际内存的系统之上,检查new失败通常是没有意义的。
2.在拥有虚拟内存的系统那个上,new失败几乎不会发生,因为早在虚拟内存耗尽之前,系统通常就已经开始颠簸了,而此时系统管理员自然会杀掉一些进程。
3.除了一些特殊情况之外,通常即便你检测到了new失败,要是真的没有内存剩下的话,那么你就做不了什么了。
2016-07-23
#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
//在堆中申请100个char类型的内存
char *str = new char[100];
//拷贝Hello C++字符串到分配的堆中的内存中
strcpy(str, "Hello imooc");
//打印字符串
cout<<str<<endl;
//释放内存
delete[]str;
str=NULL;
return 0;
}
#include <iostream>
using namespace std;
int main(void)
{
//在堆中申请100个char类型的内存
char *str = new char[100];
//拷贝Hello C++字符串到分配的堆中的内存中
strcpy(str, "Hello imooc");
//打印字符串
cout<<str<<endl;
//释放内存
delete[]str;
str=NULL;
return 0;
}