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

标签 c++ std

考虑这段代码:

#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/

相关文章:

c++ - 如何搭建应用层预取系统

c++ - Ruby vs Lua 作为 C++ 的脚本语言

c++ - 为什么 std::span 缺少比较运算符?

c++ - std::endl 导致崩溃

c++ - 为什么 C++ stdlib rand() 函数跨平台为同一个种子提供不同的值?

c++ - 在 C++ 中查找最大值、最小值和众数

c++ - 我可以在 C++ 中创建强类型整数吗?

c++ - t* 指向什么值

c++ - 使用 QQmlComponent 专门化 std::default_delete

c++ - 定义映射/集合时如何实例化比较函数(仿函数)?