我使用c ++。假设我编写以下代码:

struct node
{
    int sum;
    int min;
};

vector<node> arrnode;

for(int j=0;j<n;j++)
{
     node n1;

     n1.sum=0;
     n1.min=0;
     arrnode.push_back(n1);
}


我知道n1是一个局部变量,当我从xth移到
在for循环中,第(x + 1)个'j'的计数​​,但是调用n1的副本构造函数并将其插入向量arrnode所生成的对象呢?仅当arrnode被销毁时,它才会被销毁吗?

最佳答案

仅当arrnode被销毁时,它才会被销毁吗?


是。 std::vector实现RAII idiom,当arrnode超出范围时,arrnode的所有元素将被销毁。

如果只想使用相同的值初始化arrnode,只需通过以下方式构造它:

vector<node> arrnode{n, {0,0}};


如果要使用其他值初始化:

for(int j=0;j<n;j++)
{
   arrnode.push_back({j,j});
}


这将使代码更清洁,更快捷。

09-04 15:28