好吧,这让我陷入困境了几个月,所以我看看是否有其他人可以帮助您。

因此,在我的主程序中,我有两种结构(solarBody_t,ship_t),它们都是从同一基类(physical_t)派生的。我将两个对象都作为 vector ,因为不能将solarBody和船放置在同一 vector 中。它们都是哑指针 vector 。
我尝试使用boost::shared_ptrs的 vector 将它们放在相同的 vector 中。现在,据我所知,shared_ptrs应该具有与哑指针相同的语义和语法(例如foobar-> mass = 42;应同时适用于两者)。但是,仅将声明更改为boost::shared_ptr的 vector 为哑指针,当我尝试将内容推回shared_ptrs的 vector 时,它给我一个错误。

据我所知,这应该可行。 Boost文档提供了以下示例

boost::shared_ptr<int> p(new int(2));

这几乎就是我正在做的。

有没有人以前有过这样的经历?还是想建议另一种将所有内容存储在 vector 中的方法?

有关更多详细信息,请访问here's the gist of it(有点矛盾的词,但是我是双关语,所以在那里。)

最佳答案

我认为它不会让您从裸指针自动构造shared_ptrpush_back需要一个shared_ptr<foobar_t>,而不是裸foobar_t。您应该看看 boost::make_shared 并尝试这样的操作:

entity_smart.push_back(boost::make_shared<foobar_t>(42));
make_shared有几个优点:即,它以一种分配方式分配了指针控制块和对象本身,并在代码中保留了不匹配的new。它还清楚地表明您正在为对象创建shared_ptr

除此之外,是的,语义应该基本相同。请记住,如果您实际上不需要共享对象的所有权,那么shared_ptr可能对您正在执行的操作过大。

关于c++ - 从哑指针 vector 切换到boost::shared_ptr时遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10907178/

10-09 00:24
查看更多