这只是我遇到的一个概念性问题。在我当前的项目中,感觉我过度使用了 boostsmart_ptr
and ptr_container
图书馆。我正在创造boost::ptr_vectors
在许多不同的对象中,并调用 Transfer() 方法从一个对象中移动某些指针boost::ptr_vector
到另一个。
我的理解是,清楚地显示堆分配对象的所有权非常重要。
我的问题是,是否需要使用这些 boost 库来创建属于某个对象的堆分配成员,然后通过以下方式使用指向这些成员的普通指针get()
进行任何处理时。
例如...
一个游戏可能有一组属于它的图块。在以下位置创建这些图块可能是有意义的:boost::ptr_vector
。游戏结束后,这些图块应自动释放。
但是,如果我想暂时将这些 Tiles 放入 Bag 对象中,我是否应该创建另一个boost::ptr_vector
放入袋子中,然后通过以下方式将游戏的图块转移到袋子中:transfer()
或者
我应该创建一个std::vector<Tile*>
其中 Tiles* 引用 Tiles
在游戏中并将其传递给袋子?
Thanks.
**编辑
我应该指出,在我的示例中,游戏将有一个 Bag 对象作为成员。袋子里只会装满游戏拥有的图块。所以如果没有游戏,袋子就不会存在。
您应该只在明确的地方使用拥有的智能指针和指针容器transfer所有权。对象是否是临时的并不重要,重要的是它是否拥有所有权(因此,前一个所有者是否放弃所有权)。
如果您创建一个临时指针向量只是为了将其传递给其他函数,而原始的ptr_vector
仍然引用所有这些对象,没有所有权转移,因此您应该使用普通vector
对于临时对象 - 就像您使用原始指针传递单个对象一样ptr_vector
指向一个接受指针但不将其存储在任何地方的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)