STL push_back 对象报错

本文探讨了使用STL容器过程中遇到的问题,特别是向容器push_back自定义对象时出现的异常行为。文章详细解释了容器如何处理内存分配及对象的拷贝构造与析构过程,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天写了一个从文件中提取文件配置的类,其中用到了STL里面的容器(vector map List), 在编程程序的工程中,我的容器每向push_back一个自定义的对象时,程序会莫名的卡死,甚至崩溃。最后调试发现,没次向容器push_back进一对象时,会调用这个对象的析构方法。搜索了一下百度和经过自己调试测试发现了一些规律。

1、在开始的时候容器会给分配一个对象的空间以用来存放用户对象;

2、但是如果再向容器push_back一个对象时,容器因为本来分配的空间不够,需要给自己分配比之前分配的还要大的空间来存放这个对象。

明白了吗?还不够明白吗?

好的,我来详细的说说,为什么我之前写的程序会报错,大家都知道,向容器中push_back一个对象,其实是把这个对象的副本拷贝到容器中,当然是这个时候是会调用你定义的拷贝构造函数的,如果你没有时间你定义的对象的拷贝构造函数,就会调用对象默认的拷贝构造函数。注意了,这个地方就会个坑了,如果你的类中定了指针成员变量,这个时候你就需要自己来定义一个拷贝构造函数来深拷贝你的指针变量。

那为什么会调用对象的析构呢?

当向一个容器对象中push_back对象时,如果容器的空间不足,就会把原来在容器的里面的对象调用他们的拷贝构造函数拷贝到一个更大的空间,然后析构掉容器原来存放对象的空间,最后把才是把要push_back进来的对象拷贝进容器对象里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值