vector<int>* v = new vector<int>;
for (int i = 0; i < 100; i++) {
(*v).push_back(i);
}
delete v;
我是否删除矢量的每个元素并释放内存?如果没有,我该如何释放内存?
分配new
表达式分配内存,在该内存中构造一个动态对象,并返回指向该对象的指针。当您将这样的指针传递给delete
时,指向的对象将被销毁,内存将被释放。
当类的实例(如向量)被销毁时,将调用其析构函数。向量的析构函数会破坏向量的所有元素。
旁注1:使用分配new
和delete
很少有用。当您需要动态存储时,更喜欢使用RAII结构,如容器和智能指针。
旁注2:一般情况下,您应该避免不必要地使用动态内存。很少需要像您的示例中那样的奇异动态向量。我建议如下:
std::vector<int> v(100);
std::ranges::iota(v, 0);
旁注3:避免使用(*v).push_back
。它很难阅读。更喜欢使用间接成员访问运算符,也就是箭头运算符:v->push_back