其他分享
首页 > 其他分享> > c – 无法从哑指针向量切换到boost :: shared_ptr

c – 无法从哑指针向量切换到boost :: shared_ptr

作者:互联网

好吧,这让我在几个月内难以接受,所以我会看看是否有其他人可以帮忙解决这个问题.

所以在我的主程序中,我有两种结构(solarBody_t,ship_t),它们都是从同一个基类(physical_t)派生的.我制作了两个物体的矢量,因为我不能将solarBody和一艘船放在同一个矢量中.它们都是哑指针向量.
我尝试使用boost :: shared_ptrs的向量将两者放在同一个向量中.现在,根据我的理解,shared_ptrs应该具有与哑指针相同的语义和语法(例如foobar-> mass = 42;应该适用于两者).但是,只需将声明更改为boost :: shared_ptr向量为哑指针的向量,当我尝试将某些东西推送到shared_ptrs的向量时,它会给我一个错误.

据我所知,这应该有效.提升文档给出了一个例子

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

这正是我正在做的事情.

有没有人有过这方面的经验?或者想建议另一种方法将所有内容存储在向量中?

更多细节,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有一些优点:即,它在一次分配中分配指针控制块和对象本身,并保持代码中不匹配的新内容.它还明确表明您正在为对象创建shared_ptr.

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

标签:c,shared-ptr,vector,boost
来源: https://codeday.me/bug/20190902/1788358.html