好吧,这已经让我断断续续几个月了,所以我看看是否还有其他人可以帮助解决这个问题。
所以在我的主程序中,我有两种结构(solarBody_t、ship_t),它们都派生自相同的基类(physical_t)。我制作了两个对象的 vector ,因为我不能将 solarBody 和一艘船放在同一个 vector 中。它们都是哑指针 vector 。
我尝试使用 boost::shared_ptrs vector 将两者放在同一个 vector 中。现在,根据我的理解,shared_ptr 应该具有与哑指针相同的语义和语法(例如 foobar->mass = 42; 应该适用于两者)。然而,只是将声明更改为 boost::shared_ptr vector 到哑指针,当我尝试将某些内容推回 shared_ptr 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
有几个优点:即,它在一次分配中分配指针控制 block 和对象本身,并保持不匹配的new
。在你的代码之外。它还明确表明您正在创建一个 shared_ptr
到一个对象。
除此之外,是的,语义应该基本相同。请记住 shared_ptr
但是,如果您实际上不需要共享对象的所有权,那么对于您正在做的事情来说可能有点矫枉过正。
关于c++ - 从哑指针 vector 切换到 boost::shared_ptr 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907178/