考虑这段代码:
#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::vector
在 clear()
时调用它所包含的每个元素的析构函数叫做。
在您的特定情况下,它会破坏指针但对象仍然存在。
智能指针是正确的方法,但要小心。 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/