English 中文(简体)
如何有效删除储存在多个集装箱内的C++物体? 自动接收器
原标题:How to effectively delete C++ objects stored in multiple containers? auto_ptr?
  • 时间:2009-09-07 07:45:39
  •  标签:

我有一份申请,在处决期间制造某种类型的物体(“Foo”类的字句),以追踪一些统计数字,并将其插入两个STL地图中的一个或两个。

map<Foo*, int> map1;
map<Foo*, int> map2;

我想知道,删除oo物体的最佳途径是什么。 目前,我的解决办法是编造地图1和地图2,并将“Foo”点推入一个组,然后讨论这一组,并要求删除。

是否有更有效的方法,可能使用汽车接收器? 如果是这样的话,既然是汽车的吸收器和lt;物体可以储存在STL集装箱中?

提前感谢。

最佳回答

auto_ptr 物体不能像你所说的那样储存在STL集装箱内。 为此,我谨使用<代码>共享_ptr(从升值)物体。 它是一个参考点,因此,只有在超出范围时,才会删除该物体。

typedef<shared_ptr<Foo>, int> Map;
Map map1;
Map map2;

现在,你只是从<条码>1和<条码>>>上添加并删除了作为点人的<条码>、<条码>、<条码>、>共享_ptr<条码>物体,并在删除最后提及时注意删除。

问题回答

用途增强:共享吸收器,具体针对物体可从多个地点参考的情况。 此处使用自动接收器并不是一种选择,一旦对物体的首批自动接收器被销毁,则后一物体被丢弃,而后一物体则被直接放在ling子上。

我猜测你需要一份总清单或一组物体,如果你能够复制这些物体,或更可能由点人持有,以便你能够复制点子并将其输入其他收藏品。

std::list<Foo*> Master;

这些其他收集资料(map1>>/map2,请在任何时候插入和删除这些编号。 最后,在你想要删除所有东西时,你可能只是删除这些地图,或让它们脱离范围,或无视这些地图,而只是一次又回到主名单,并通过删除所发现的点子而er。





相关问题
热门标签