C++ new 和异常

简介: new异常,在分配内存的时候如果失败我们可以使用bad_alloc类来完成他在new头文件中, 他是从exception类共有派生而来,当无法分配内存给予new一个空指针,使用bad_alloc的 what()来返回输出 异常如下 #includ #incl...
new异常,在分配内存的时候如果失败我们可以使用bad_alloc类来完成他在new头文件中,
他是从exception类共有派生而来,当无法分配内存给予new一个空指针,使用bad_alloc的
what()来返回输出
异常如下
#includ<iostream>
#include<new>      //必须包含
#include<cstdlib>
using namespace std;


class test
{
        public:
                double a[20000];
                ~test(void){cout<<"test"<<endl;}
};


int main(void)
{
        test *pd;
        try
        {
                cout<<"Will give big mem?!"<<endl;
                pd = new test[10000000];
        }
        catch (bad_alloc &ba)
        {
                cout<<"exception!\n";
                cout<<ba.what()<<endl;
                exit(EXIT_FAILURE);
        }
        cout<<"mem success\n";
        delete [] pd;
}


返回如下:
gaopeng@bogon:~/CPLUSPLUS/part15$ ./a.out 
Will give big mem?!
exception!
std::bad_alloc


另外在gcc中我们也可以这样用使用std::nothrow让分配内存失败返回一个空指针
#include<iostream>
#include<new>
#include<cstdlib>
using namespace std;




class test
{
        public:
                double a[20000];
                ~test(void){cout<<"test"<<endl;}
};




int main(void)
{
        test *pd;
        pd = new (std::nothrow)test[10000000];
        if(pd == 0)
        {
                cout<<"no mem give!!"<<endl;
                exit(EXIT_FAILURE);
        }
}


更加简洁
相关文章
|
23天前
|
安全 程序员 编译器
【C++】异常
C++异常处理机制允许在程序运行时出现错误时,通过`try`、`catch`和`throw`关键字将错误信息传递回调用栈,进行异常处理。它支持异常的重新抛出、自定义异常体系以及标准库提供的异常类层次结构,如`std::exception`及其派生类。异常处理提高了代码的健壮性和可维护性,但也带来了性能开销和代码复杂性等问题。合理使用异常机制,可以有效提升程序的稳定性和安全性。
43 3
|
2月前
|
C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
程序员 C语言 C++
C++入门5——C/C++动态内存管理(new与delete)
C++入门5——C/C++动态内存管理(new与delete)
76 1
|
3月前
|
C++
C++(十九)new/delete 重载
本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
|
5月前
|
C++
C++ 异常机制问题之捕获异常的问题如何解决
C++ 异常机制问题之捕获异常的问题如何解决
|
5月前
|
NoSQL 编译器 Redis
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
|
4月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
52 0
|
5月前
|
安全 Java 程序员
【C++11】异常知多少
【C++11】异常知多少
53 7