0

私は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はローカル変数であり、 forループで 'j' の x 番目から (x+1) 番目のカウント 移動 すると、そのデストロイヤーが呼び出されることはわかっています。ベクトルarrnodeに挿入されます。arrnodeが破棄された場合にのみ破棄されますか?

4

2 に答える 2

1

arrnode が破棄された場合にのみ破棄されますか?

はい。std::vectorこれは、コンテナ自体が破壊されたときに含まれている要素を破壊する (および標準ライブラリ内の他のすべてのコンテナ)のポイントです。

于 2013-07-21T11:40:58.833 に答える
1

arrnode が破棄された場合にのみ破棄されますか?

はい。RAII idiomstd::vectorを実装しており、 arrnodeがスコープ外になると、 arrnodeのすべての要素が破棄されます。

arrnode同じ値で初期化するだけの場合は、次のように構築するだけです。

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

別の値で初期化する場合:

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

これにより、コードがよりクリーンで高速になります。

于 2013-07-21T11:43:25.060 に答える