Chinaunix

标题: stl vector 内存释放问题 [打印本页]

作者: gridbird    时间: 2013-05-16 06:33
标题: stl vector 内存释放问题
做了个vector 内存释放的实验。
第一种情况, 定义一个vector:    vector< string > testStrv; 然后做10000000次push back 一个字符串 “aaaaaaaaaaa”的操作,然后用swap: vector<string>().swap(testStrv) 可以释放掉内存, 没有问题。

第二种情况, 定义一个结构体和装载这个结构体的vector:

struct testStruswap {

   string tStr;
   int tInt;

};

vector< testStruswap > mytestStruswapv;

然后做10000000次push back :

testStruswap  obTestStruswap;
obTestStruswap.tStr = "aaaaaaaaaa";
obTestStruswap.tInt = 2;

mytestStruswapv.push_back( obTestStruswap  );

然后用swap释放内存:


vector< testStruswap   >().swap(mytestStruswapv);

最后发现只能释放掉很少的一部分内存 (5%), 不知道问题到底在哪里?

各位有没有遇到类似这样的问题, 多谢!


















作者: bruceteen    时间: 2013-05-16 08:23
最后发现只能释放掉很少的一部分内存 (5%), 不知道问题到底在哪里?
------ 你是怎么发现的呢? 我昨天夜观天象,一会儿发现相对论错误,一会儿发现弦论错误,不知道问题到底在哪里?
作者: buboi    时间: 2013-05-16 15:11
回复 1# gridbird


    vector会调用结构体的Copy构造函数和析构函数。

    你需要自己实现结构体的Copy Constructor,需要对string变量深Copy。缺省的Copy Constructor只Copy指针值,是浅Copy。





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2