中易网

STL中的vector,如果元素的构造函数抛出异常,会否出现资源泄露

答案:2  悬赏:30  
解决时间 2021-02-14 01:09
STL中的vector,如果元素的构造函数抛出异常,会否出现资源泄露
最佳答案
#include <stdio.h>
#include <vector>
using namespace std;

struct A {
    A() {
        id = count++;
        if (count == 5) {
            throw "too many A";
        }
    }
    A(const A&) {
        id = count++;
        if (count == 5) {
            throw "too many A";
        }
    }
    ~A() {
        printf("dtor of A, id = %d\n", id);
    }
    int id;
    static int count;
};

int A::count = 0;

int main() {
    try {
        vector<A> a(10);
    } catch (const char* str) {
        printf("catched exception: %s\n", str);
    }
    return 0;
}vector的创建过程如果抛出了异常,会调用已经创建好的A的析构函数,所以A类保证析构正确释放资源就不会有泄露。当然,A的构造函数也应该保证不泄露资源。
全部回答
元素的构造函数抛出异常,那你就去找和元素相关的东西,如果元素是系统资源,如GDI对象,内核对象,还有自己用new或malloc生成的内存空间,没有得到释放,那就会造成资源泄露或内存泄露,而且这和vector本身并没有太大关系,一般vector都会调用removeall或clear方法对vector容器进行清理。 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么才能忘记黑历史,我总是把黑历史记得很清
日盈五交化商店NO.内海017我想知道这个在什么
种植多年的月季会老化吗
元华电器修理这个地址在什么地方,我要处理点
情侣在一起有四年多了,每次一起睡觉都会流汗
Yes or No时尚鲜饮健康路店在哪里啊,我有事
拘役要带什么东西
家里的煤气灶里有个装置,放进去一节干电池就
标准集团差价合约是个什么东西?靠谱吗?
因上学期患上的抑郁症,这学期被大学强制退学
张吉村居委会地址有知道的么?有点事想过去
刚才被猫挠出血了,用打针么?急,在线等
丁香园社区人口文化活动室我想知道这个在什么
爸爸进孩子房间时不敲门是什么行为
上环泰安需要多少钱
推荐资讯
吉超门窗地址在哪,我要去那里办事
艾尚披萨三全路店这个地址在什么地方,我要处
五人制足球为什麼有两个点球
去哪里查询自己扣扣网名和头像分组用了多久,
被流放是什么意思
谁有美食大战老鼠的号,好一点点的,要真的,
通常供电公司和自来水公司都会一再要求涨价,
龙泰汽车租赁地址在哪,我要去那里办事
卡娃微卡制作的相册如何下载到电脑
营业收入是指()
如何将3.7v的锂电池降到1.5v
求助:网上减员提示“此人减少后该单位下没有
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?