c++ new 对象问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ new 对象问题相关的知识,希望对你有一定的参考价值。

C++ new 一个指针对象失败后,怎么判断失败,如何处理失败的结果呢??求助!

new 返回一个指定类型的指针,这个指针指向成功分配动态内存块的首地址,在分配失败的情况下,抛出异常std::bad_alloc而不是返回NULL,因此通过判断返回值是否为NULL是徒劳的。

#include <iostream>
using namespace std;

char *GetMemory(unsigned long size) 
char *p = new char[size];//分配失败,不是返回NULL
return p;


int main() 
try 
char *p = GetMemory(10e11);// 分配失败抛出异常std::bad_alloc
//...........
// if(!p)//徒劳
// cout<<"failure"<<endl;
delete [] p;

catch(const std::bad_alloc &ex) 
cout << ex.what() << endl;

return 0;

参考技术A Effective有一节专门讲这个,通常的处理是用 try catch来做异常处理,
new分配失败后会有一个bad alloc的异常。

失败了就是对象没分配成功,一般只要有内存都不会失败的,因为可以用虚拟内存,
失败了一般是内存耗尽了,这种属于系统严重故障了。这种时候恐怕不止你这一个
软件有问题,系统上运行的其他软件也会有问题。追问

嗯,有个例子就懂了,谢啦

以上是关于c++ new 对象问题的主要内容,如果未能解决你的问题,请参考以下文章

没有 new 关键字并使用指针的 C++ 对象初始化 [重复]

C++中用new开辟一个对象后怎么给其私有数据成员赋值

C++笔记--面向对象(OOP)编程基础(new/delete类的静态成员c++编译器对象管理模型分析)(3-2)

C++ New vs Malloc 用于对象的动态内存数组

C++中new和deletede 用法

c++师傅领进门,修行靠个人第三篇:单身狗福利!!new一个属于你的对象