c++ - 如何删除 vector 的指针

标签 c++ pointers vector

我想正确删除 vector 中的所有元素。我需要按照您应该在下面看到的方式填充结构 vector 的 vector ,每次创建一个新的结构 vector 调用 new 方法。

这是我的代码:

struct node
{
    int index;
    double value;
}

struct problem
{
    int l;
    struct node **x;
};

struct problem prob;    // set by read_problem
std::vector<node *> vettProbX;


int main(){
    node tmpValue;
    std::vector <node> *temp;

    for (int i=0; i<10; i++)
    {
        temp = new std::vector<node>;

        for (int i=0; i<10; i++)
        {
            tmpValue.index=i;
            tmpValue.value=i;
            temp->push_back(tmpValue);
        }

        vettProbX.push_back(temp->data());

    }

    prob.x=&vettProbX[0];

    //Destructor
    for(int CC=0; CC<vettProbX.size(); CC++)
    {
        delete  temp[CC];
    }
    return 0;
}

我想删除所有用NEW分配的新对象,但我不知道如何正确地做。

最佳答案

你用 new 分配的唯一对象是 std::vector<node> *temp; . 你用 delete temp; 删除它Vectors 自己的析构函数将处理其内容的销毁。但是每次调用 new 时都必须这样做。在这种情况下,您在循环内部进行分配,因此您需要在循环结束时调用 delete。

但是因为temp只在范围内使用,不需要动态分配。您可以像这样在堆栈上分配它:std::vector<node> temp; .然后它会在超出范围时自动销毁(在这种情况下是在函数结束时)。

在您的代码中,您分配了 10 次 temp,但您泄漏了前 9 次,因为您没有将它们的指针存储在任何地方(因此无法再删除它们)。您总是会覆盖先前温度的指针。在代码的末尾,您尝试删除最后一个临时文件的内容(您不能这样做,因为内容不是指针)而不是 vector 本身。

要实现您想要做的事情,您需要做的是将所有临时指针存储在 std::vector<std::vector<node>* > 中。最后删除里面的每个 vector 。但是,如果您根本不使用任何指针,您的代码会好得多。

此外,您还有两个使用相同循环变量的嵌套循环。它可能不会像您预期的那样工作。

关于c++ - 如何删除 vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606030/

相关文章:

c++ - 令人困惑的 std::map 插入行为

c++ - 全局类型转换运算符重载?

c++ - pointer_traits 为既不是 X<A, T...> 也没有提供成员 typedef element_type 的类型提供什么?

c++ - 对整数指针数组进行排序

vector - 如何在 Rust 中将相同的整数添加到向量的每个元素?

c++ - 在声明期间将值初始化为二维 vector

c++ - “enum class”的递增和递减

c++ - Axis/C MIME/DIME 和 MTOM 入门

c - 指向数组语法的奇怪指针

c++ - std::vector 增加峰值内存