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