当前位置:  开发笔记 > 编程语言 > 正文

如何删除stl容器?

如何解决《如何删除stl容器?》经验,为你挑选了2个好方法。

容器对象如stl中的vector如何被破坏,即使它们是在堆中创建的?

编辑

如果容器包含指针,那么如何销毁这些指针对象



1> jmucchiello..:

指针的STL容器不会清理指向的数据.它只会清理持有指针的空间.如果您希望向量清理指针数据,则需要使用某种智能指针实现:

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

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

当该范围结束时,两个向量将释放其内部数组.v1将泄漏创建的SomeClass,因为只有指向它的指针才在数组中.v2不会泄漏任何数据.



2> derobert..:

如果你有vector,你的代码需要在删除向量之前删除那些指针:否则,该内存被泄露.

知道C++不做垃圾收集,这里有一个原因的例子(语法错误的应用,自从我编写C++以来已经有一段时间了):

typedef vector vt;
?
vt *vt1 = new vt, *vt2 = new vt;
T* t = new T;
vt1.push_back(t);
vt2.push_back(t);
?
delete vt1;

最后一行(delete vt1;)显然不应该删除它包含的指针; 毕竟,它也在vt2中.所以它没有.也不会删除vt2.

(如果你想要一个在destroy上删除指针的向量类型,当然可以编写这样的类型.可能已经写过.但要注意删除其他人仍然持有副本的指针.)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有