c++ - 从哑指针 vector 切换到 boost::shared_ptr 时出现问题

标签 c++ boost vector shared-ptr

好吧,这已经让我断断续续几个月了,所以我看看是否还有其他人可以帮助解决这个问题。

所以在我的主程序中,我有两种结构(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/

相关文章:

c++ - 开发iOS应用最常见的方法是什么?

c++ - std::set of boost::weak_ptr<T> - 将 const_iterator 转换为 const T?

c++ - union 中的 boost::optional<>?

r - 如何将 2 个字符向量的组合识别为预定义向量的名称

r - 用向量 B 的每个元素减去向量 A 的每个元素

c++ - 注册变量

c++ - 使用 boost::serialization 将派生类指针序列化为 vector 的问题

c++ - 在 C/C++ 中初始化和归零数组的区别?

c++ - 使用 boost date_time 解析和创建 HTTP 日期

vector - 我如何从 Rust 中的 Vec 中取出一个项目?