C ++方法变量声明

时间:2010-12-04 15:36:12

标签: c++ vector scope std

目前我正在研究这个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只分配一次,参考将不胜感激。

4 个答案:

答案 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容器都可以。