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:使用分配 newdelete 很少有用。当您需要动态存储时,更喜欢使用容器和智能指针等 RAII 构造。

旁注 2:通常应避免不必要地使用动态内存。很少需要像您的示例中那样的奇异动态向量。我建议改为:

std::vector<int> v(100);
std::ranges::iota(v, 0);

旁注 3:避免使用 (*v).push_back。很难读。更喜欢使用间接成员访问运算符,也就是箭头运算符:v->push_back