目前我正在研究这个C ++源代码。我不是C ++ dev。
void SomeClass::SomeMethod() const
{
vector<Thing> things(count);
...
//Elements are added or replaced in things but no deallocation of things here
}
SomeMethod
被召唤很多次。任何人都可以确认没有泄漏,things
只分配一次,参考将不胜感激。
答案 0 :(得分:5)
每次进入函数时都会创建vector
并在它离开范围时销毁(销毁所有对象并释放所有内存)(当函数结束时)。没有泄漏,但如果你经常调用这个函数,会有很多分配和解除分配。
您有两种解决方案可以避免这种情况:
mutable
,以允许通过const
方法更改),答案 1 :(得分:2)
如果Thing
正确实现,只要它的析构函数和其他成员函数(特别是复制构造函数,因为它在vector
内务处理中使用)正确处理其数据成员的所有内存,它将做的是创建每次调用函数时都有一个新的vector<Thing>
。
当变量超出范围(即在函数退出时)时,生成的局部变量things
被正确释放,包括销毁每个Thing
成员。
如果没有看到方法和Thing
中的所有代码,就不可能更明确,但这种用法是正确的。
答案 2 :(得分:2)
“things”是一个本地自动变量。 另一篇文章有一个答案:Where are the local, global, static, auto, register, extern, const, volatile variables are stored?
答案 3 :(得分:1)
在该函数中本地放置。当它超出范围时,它将自行释放内存;所有的STL容器都可以。