【发布时间】:2015-04-17 10:04:38
【问题描述】:
我得到了下面的代码。它编译得很好。
class A
{
public:
static std::vector<int> vInt;
static std::vector<int> Foo()
{
std::vector<int> tmp;
// EDIT: in the real application the values
// inserted in the vector depends on the result
// of other functions being called before Foo()
tmp.push_back(7);
tmp.push_back(9);
return tmp;
}
};
std::vector<int> A::vInt;
int main()
{
// .... some code
A::vInt = A::Foo();
// .... more code
}
但我想知道它是否有内存泄漏?
我在想那行:
std::vector<int> A::vInt;
正在构造一个向量(一个空向量)。
但该向量后来被以下行替换:
A::vInt = A::Foo();
所以第一个向量永远不会被破坏,我有内存泄漏。 这是对还是错?
编辑: 我最初的问题没有提到在实际应用程序中我不能从一开始就调用 Foo() 。 Foo() 返回的值取决于需要首先调用的其他函数。很抱歉不清楚...
【问题讨论】:
-
无泄漏。赋值运算符为您处理事情。
-
顺便说一句,您分配的不是初始化。声明和定义确定执行什么初始化,在您的情况下为默认初始化,这意味着为您的示例调用默认ctor。
-
不,在您的场景中它是无害的(您在运行时更改向量),但如果其他静态对象引用它,则在静态初始化期间可能会变得很麻烦(但是,即使那样,您也没有内存泄漏)
标签: c++ vector memory-leaks