我有一个应用程序,它在执行期间创建某种类型的对象(比如"Foo"类),跟踪一些统计信息,并将它们插入到两个STL映射中的一个或两个中,例如:
map<Foo*, int> map1;
map<Foo*, int> map2;
Run Code Online (Sandbox Code Playgroud)
我想知道删除Foo对象的最佳方法是什么.目前我的解决方案是迭代map1和map2,并将Foo指针放入一个集合中,然后在这个集合上进行交互并在每个集合上调用delete.
有没有更有效的方法,可能使用auto_ptr?如果是这样,因为auto_ptr <>对象不能存储在STL容器中?
提前致谢.
180*_*ION 10
auto_ptr
正如你所说,对象不能存储在STL容器中.为此,我喜欢使用shared_ptr
对象(来自boost).它是一个引用计数指针,因此当对象超出范围时,该对象将仅被删除一次.
typedef<shared_ptr<Foo>, int> Map;
Map map1;
Map map2;
Run Code Online (Sandbox Code Playgroud)
现在,你只需要添加和删除从map1
和map2
,shared_ptr
对象,因为他们指针,他们将采取删除,当最后一个引用被移除的照顾.
使用boost :: shared_ptr - 它专门用于可以从多个位置引用对象的情况.在这里使用auto_ptr不是一个选项 - 一旦对象的第一个auto_ptr被破坏,第二个就会留下一个悬空指针,这是未定义行为的直接方式.
归档时间: |
|
查看次数: |
887 次 |
最近记录: |