gpt4 book ai didi

c++ - std::vector.clear() 是否在每个元素上删除(可用内存)?

转载 作者:IT老高 更新时间:2023-10-28 13:23:10 33 4
gpt4 key购买 nike

考虑这段代码:

#include <vector>

void Example()
{
std::vector<TCHAR*> list;
TCHAR* pLine = new TCHAR[20];
list.push_back(pLine);
list.clear(); // is delete called here?
// is delete pLine; necessary?
}

list.clear() 是否在每个元素上调用 delete? IE。我必须在 list.clear() 之前/之后释放内存吗?

最佳答案

std::vectorclear() 时调用它所包含的每个元素的析构函数叫做。在您的特定情况下,它会破坏指针但对象仍然存在。

智能指针是正确的方法,但要小心。 auto_ptr不能在 std 容器中使用。 boost::scoped_ptr也不能。 boost::shared_ptr可以,但它不适用于您的情况,因为您没有指向对象的指针,您实际上正在使用数组。因此,您的问题的解决方案是使用 boost::shared_array .

但我建议你使用 std::basic_string<TCHAR>相反,您不必处理内存管理,同时仍然可以获得使用字符串的好处。

关于c++ - std::vector.clear() 是否在每个元素上删除(可用内存)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594089/

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