Dra*_*gos 4 c++ windows exception
我试图捕获bad_alloc异常,以证明使用析构函数.
这是我的对象:
#include "Obj.h"
#include<iostream>
using namespace std;
Obj::Obj() {
d = new double[200000000];
}
Obj::~Obj() {
cout << "destroyed \n";
}
主要方法:
#include "Obj.h"
#include <iostream>
using namespace std;
int main(){
Obj* ptr[1000000];
try{
    for(int i=0; i<1000; i++){
        ptr[i] = new Obj();
    }
} catch(bad_alloc){
    cout<<"EXCEPTION";
}
}
我的程序不再捕获异常,而是停止并尝试在线查找解决方案(Windows).为什么会这样?
编辑 我现在得到异常,但我应该证明在抛出异常之前使用了析构函数.我该怎么办?
在您开始动态分配对象之前,会出现此问题.如果运行附带调试器的程序,您将看到程序因堆栈溢出而终止.为什么?
Obj* ptr[1000000];
您无法声明具有自动存储持续时间的对象如此之大.当main输入的,它试图在栈上分配空间这个对象和没有这样做的话,使得被抛出一个堆栈溢出结构化异常.您的应用程序不处理此异常,因此运行时终止程序.
但请注意,Obj析构函数永远不会被程序调用.当您使用动态分配对象时new,您负责使用它来销毁它delete.由于您没有调用delete来销毁您创建的对象,因此它们永远不会被销毁.
如果你要使用,比如说std::vector<std::unique_ptr<Obj>>(或者,就此而言,只是一个std::vector<Obj>),你会看到将为每个完全创建的Obj对象调用析构函数.
| 归档时间: | 
 | 
| 查看次数: | 1842 次 | 
| 最近记录: |