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