使用复制构造函数创建的对象的生命周期

时间:2013-07-21 11:38:11

标签: c++ copy-constructor

我使用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 移动到它时会调用它的驱逐舰 循环中(x + 1)的'j'计数。但是通过调用 n1 并插入到向量 arrnode 中。只有在 arrnode 被销毁时它才会被销毁吗?

2 个答案:

答案 0 :(得分:1)

  

只有当arrnode被销毁时它才会被销毁吗?

是。这正是std::vector(以及标准库中的所有其他容器)在容器本身被破坏时破坏它所包含的元素的重点。

答案 1 :(得分:1)

  

只有当arrnode被销毁时它才会被销毁吗?

YES。 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});
}

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