安全的进行new 操作
来源:互联网 发布:scala编程思想 下载 编辑:程序博客网 时间:2024/06/12 13:58
我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码:
int * p = new int [MAXSIZE]
if (p == 0) // 检查p指针是否为空
return -1;
//other code
其实,这里的 if ( p == 0 ) 完全没有意义的。C++ 里,如果 new 分配内存失败,默认是抛出异常的。所以,如果分配成功,p == 0 就绝对不会成立;而如果分配失败了,也不会执行 if ( p == 0 ),因为分配失败时,new 就会抛出异常跳过后面的代码。如果你想检查 new 是否成功,应该捕捉异常:
try
{
int * p = new int [MAXSIZE]
}
catch( bad_alloc & exp)
{
cerrr<<exp.what()<<endl;
}
但是 有的程序员并不习惯捕捉异常,标准C++也提供了一种方法不抛出异常而返回空指针。
int * p = new (std::nothrow)int [MAXSIZE]
if (p == 0) // 检查p指针是否为空
return -1;
//other code
0 0
- 安全的进行new 操作
- new 操作是否线程安全?
- 一个使用bouncycastle进行安全操作的实用类
- 备份数据,安全进行生产库的操作
- 对操作oracle数据库的用户进行安全权限控制
- Android程序的安全系统--以root权限进行操作
- win32 对栈进行安全的多线程操作
- new 操作符所执行的工作和类型安全总结
- 新new 的一个对象不对它进行任何操作,直接返回,将返回什么?
- 安全的使用new分配内存
- 安全的str操作
- 安全的eval操作
- new操作符(new operator) 和 new操作(operator new)的区别
- 关于firefox安全限制限制您进行剪贴板操作的解决方法
- 使用线程安全的 MSWeakTimer ,它不会对目标进行retain操作,避免循环引用
- c++ 的new 数组操作
- new操作的性能问题
- js中的的new操作
- 三国演义告诉我们的59条真理
- Ubuntu下编译和安装源文件
- (一)ROS系统命令学习
- POJ 3009
- 研发管理的一点心得
- 安全的进行new 操作
- 给定一个数组,该数组存贮R,G,B三种字符,将该数组按RGB顺序排序,不能使用辅助内存空间,且只能遍历数组一次。
- 办公室“杀手” 消耗你的孕力
- Android 最火的快速开发框架XUtils
- Python
- qt QJsonDocument QVariant
- Android 自动化测试工具Robotium 之Solo类的详细说明
- C语言单链表实现19个功能完全详解
- (二)创造一个简单的ROS package