gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:05 27 4
gpt4 key购买 nike

我想正确删除 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com