c++ vector的一个问题:

zzw_happy 2010-01-25 01:48:58


#include <vector>
#include <iostream>

using namespace std;
struct AAA{
int i;
AAA(int ii) :i(ii){
cout<< "init AAA "<<i<< endl;
}
~AAA(){
cout<< "del AAA "<<i<<endl;
}
};

int main(){
vector<AAA> vaaa;

for(int i=0; i< 2; i++){
cout<< "push to vector "<<i<<endl;
vaaa.push_back(AAA(i));
}

cout << "erase 0 .........\n";

vaaa.erase(vaaa.begin());

cout<< "exit main\n";

return 0;
}


输出如下:
push to vector 0
init AAA 0
del AAA 0
push to vector 1
init AAA 1
del AAA 0
del AAA 1
erase 0 .........
del AAA 1
exit main
del AAA 1

不知道为什么“erase 0”后面会有2个"del AAA ?" 。按理说临时对象AAA0已经被清除了啊。
求指点!
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzw_happy 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 laowu_ 的回复:]
vector发生内存重新分配的时候,先建立一个比原有内存单元大2倍的内存单元,然后把原有的vector的一个副本拷贝到新的内存单元中,然后将原有的内存单元撤消,这个动作应该会调用它的析构函数
[/Quote]
nod,我也是这么考虑的,见2楼。
stl看不懂,只能猜了
冻结 2010-01-25
  • 打赏
  • 举报
回复
vaaa.push_back(AAA(i));
只是将AAA(i)的副本给vector一份。
AAA(i)还继续存在,直到for }。
AAA(i)出栈析构。

_JeffreyWu 2010-01-25
  • 打赏
  • 举报
回复
这个帖子和你的问题类似 [传送门]
_JeffreyWu 2010-01-25
  • 打赏
  • 举报
回复
vector发生内存重新分配的时候,先建立一个比原有内存单元大2倍的内存单元,然后把原有的vector的一个副本拷贝到新的内存单元中,然后将原有的内存单元撤消,这个动作应该会调用它的析构函数
cattycat 2010-01-25
  • 打赏
  • 举报
回复
加上拷贝构造函数,里边输出copy consturctor i 看起来会清楚点
sunjie21 2010-01-25
  • 打赏
  • 举报
回复
弱弱的问一下,回复时,怎样才能有楼主那样的代码效果
zzw_happy 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vegertar 的回复:]
你把copy constructor写一些吧。。。
[/Quote]
我试试,不过缺省的拷贝构造就是memcpy啊?
zzw_happy 2010-01-25
  • 打赏
  • 举报
回复
是不是加入1的时候vector重新分配其数组内存了?先把所有内容清掉(调用析构),再分配空间,拷贝原来的部分并加入新的部分(不调用构造)?
Vegertar 2010-01-25
  • 打赏
  • 举报
回复
你把copy constructor写一些吧。。。

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧