C++ 在循环中只为函数内的变量分配一次内存

C++ 在循环中只为函数内的变量分配一次内存,c++,memory-management,C++,Memory Management,让我们使用一个函数func,它为vec分配内存。另外,让我们来看一下,func在循环中被多次调用 void func () { std::vector<int> vec; vec.resize(someNumber); } for (int i=0; i<someNumber; ++i) { func (); } void func() { std::vec; 调整向量大小(someNumber); } 对于(int i=0;i我可以看到两种可能的解

让我们使用一个函数
func
,它为
vec
分配内存。另外,让我们来看一下,func在循环中被多次调用

void func ()
{
    std::vector<int> vec;
    vec.resize(someNumber);
}

for (int i=0; i<someNumber; ++i)
{
    func ();
}
void func()
{
std::vec;
调整向量大小(someNumber);
}

对于(int i=0;i我可以看到两种可能的解决方案。一种是让函数引用它可以使用的
std::vector

void func (std::vector<int> & vec)
{
    vec.resize(someNumber);
}
void func(标准::向量和向量)
{
调整向量大小(someNumber);
}
另一种可能性是创建一个使用私有向量的函子,因此可以重用分配,假设它被多次调用

class SomeFunctor
{
public:
    void operator()();

private:
    std::vector<int> vec;
}

void SomeFunctor::operator()()
{
    vec.resize(someNumber);
}
类SomeFunctor
{
公众:
void运算符();
私人:
std::vec;
}
void SomeFunctor::operator()()
{
调整向量大小(someNumber);
}
可以这样使用:

SomeFunctor func;

for (int i=0; i<someNumber; ++i)
{
    func ();
}
somefunc;

对于(int i=0;i,正如Beta所说,每次调用函数
func()
,都会创建一个新的向量,并在函数退出时销毁。如果您希望有一个向量,每次调用该向量时都会调整其大小,您可以执行以下操作

std::vector<int> vec;
for (int i=0; i<someNumber; ++i)
{
    vec.resize(i);
}
std::向量向量向量机;

对于(int i=0;您熟悉代码<静态<代码>关键字】?@乔恩:为存储向量内容而分配的内存位于堆上,而不是堆栈。“堆”和“栈”在讨论C++时都是错误的术语。存储。@Griwes一点也不——它们仍然完全相关。@shibli您需要告诉我们更多关于为什么要这样做,以及您在
func()中使用
向量
还做了什么
。你担心什么?那不是真的-如果它已经包含足够的元素,它将不会调整大小。@DeadMG如果它包含完全相同的数字,则是。在所有其他情况下,它将重新分配。
std::vector<int> vec(someNumber);