64,685
社区成员
发帖
与我相关
我的任务
分享
class myclass
{
...
vector<int> m_result
};
...
void myclass:function(void)
{
vector<int> result;
...//获得阶段数据
m_result.insert(m_result.end(), result.begin(), result.end());
...
}
myclass::~myclass()
{
...//其他处理
vector<int>().swap(m_result);//增加这句后,就不再有内存泄漏
}
size_type _Capacity = capacity();
if (_Count == 0)
;
else if (max_size() - size() < _Count)
_Xlen(); // result too long
else if (_Capacity < size() + _Count)
{ // not enough room, reallocate
_Capacity = max_size() - _Capacity / 2 < _Capacity
? 0 : _Capacity + _Capacity / 2; // try to grow by 50%
if (_Capacity < size() + _Count)
_Capacity = size() + _Count;
pointer _Newvec = this->_Alval.allocate(_Capacity);
这个try to grow by 50% ???
我一共插入了5个元素,这么说在插入第5个元素时,_Capacity由4变成了6,传入了this->_Alval.allocate。而clear只会按5个元素清除,刚好漏了一个!!
void myclass:function(void)
{
vector<int> result;
//获取数据
result.push_back(...);
result.push_back(...);
result.push_back(...);
result.push_back(...);
result.push_back(...);
m_result.insert(m_result.end(), result.begin(), result.end());
...
}
//为什么不这样写呢?
void myclass:function(void)
{
//获取数据
m_result.push_back(...);
m_result.push_back(...);
m_result.push_back(...);
m_result.push_back(...);
m_result.push_back(...);
...
}