好吧,这让我陷入困境了几个月,所以我看看是否有其他人可以帮助您。
因此,在我的主程序中,我有两种结构(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_ptr
。 push_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/