c++ - 如何删除 STL 容器?

标签 c++ memory-management stl vector containers

STL 中的容器对象(如 vector)如何在堆中创建时被销毁?

编辑

如果容器持有指针,那么如何销毁那些指针对象

最佳答案

指针的 STL 容器不会清除指向的数据。它只会清理存放指针的空间。如果你想让 vector 清理指针数据,你需要使用某种智能指针实现:

{
    std::vector<SomeClass*> v1;
    v1.push_back(new SomeClass());

    std::vector<boost::shared_ptr<SomeClass> > v2;
    boost::shared_ptr<SomeClass> obj(new SomeClass);
    v2.push_back(obj);
}

当该作用域结束时,两个 vector 都将释放它们的内部数组。 v1 将泄漏创建的 SomeClass,因为数组中只有指向它的指针。 v2 不会泄露任何数据。

关于c++ - 如何删除 STL 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383016/

相关文章:

android - 将 STL 与 Android NDK C++ 一起使用

c++ - STL中迭代器和容器的关系

for 循环陷阱中的 C++ 迭代器?

c++ - 推断可变模板参数包元素的类型

c++ - openCV 将 IplImage 与 cv::Mat 混合

Android:我的应用程序使用了多少内存?

C++ 指针算术循环访问冲突

c++ - Boost.Test如何进行测试?

c++ - 无限循环不接受输入

c++ - __m128 何时在 xmm 寄存器中?