gpt4 book ai didi

c++ - 如何释放指针 vector ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:47 25 4
gpt4 key购买 nike

如何释放指针 vector 中的内存?这是代码:

class A
{
private:
int x,y,z;
public:
A(param1, param2, param3)
{
x=param1;
y=param2;
z=param3;
}
~A()
{
//prompts an alertbox, warning me about the successful call of the destructor;
}
};

...
vector<A*> list;
list.push_back(new A(1,2,3));

list.erase(list.begin()+index);//SHOULD delete the object from the memory;
list.clear();

我发现 .erase() 不会释放内存,也不会调用析构函数;我尝试通过迭代对每个列表条目使用 delete,但在一次迭代后崩溃。已经检查列表条目是否已经为 NULL,以避免任何错误。我错过了什么吗?另外,我必须只使用 STL,不需要 Boost。

最佳答案

list.erase 将为其成员元素释放内存(并调用它们的析构函数,如果它们存在);它不会对它们调用 delete

Boost shared_ptr 将是执行此操作的明显方法。如果您不想使用它,您要么编写自己的智能指针类,要么遍历 list 并在调用之前对每个指针调用 delete 删除。你可以用类似的东西巧妙地做到这一点:

void my_delete(A *p)
{
delete p;
}

...

std::for_each(list.begin(), list.end(), my_delete);

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

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