如果我在C ++中执行以下操作会发生什么:
vector<int> vect;
vect = vector<int>(8);
vect = vector<int>(3);
第二行中分配的八个整数是否会在最后一行被删除,还是会被分配但丢失? (即内存泄漏)
答案 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.
因此,我们可以得出结论,不会有任何内存泄漏。