如果我设置一个现有的vector = vector <int>(num)?</int>,我会得到内存泄漏吗?

时间:2014-10-30 18:24:25

标签: c++ vector memory-leaks

如果我在C ++中执行以下操作会发生什么:

vector<int> vect;
vect = vector<int>(8);
vect = vector<int>(3);

第二行中分配的八个整数是否会在最后一行被删除,还是会被分配但丢失? (即内存泄漏)

2 个答案:

答案 0 :(得分:6)

不,没有内存泄漏。与所有精心设计的资源管理类一样,vector会重载其赋值运算符以执行正确的操作。

它将重用其内存;或解除分配并分配新块;或者,使用移动语义,取消分配它并从正在分配的临时向量中获取内存。

答案 1 :(得分:0)

按标准规定

23.2.3 Sequence containers [sequence.reqmts]
Table 100
a = il; X& Requires: T is CopyInsertable into X and
                     CopyAssignable. Assigns the range
                     [il.begin(),il.end()) into a. All existing
                     elements of a are either assigned to or
                     destroyed.
                     Returns: *this.

因此,我们可以得出结论,不会有任何内存泄漏。