【发布时间】:2015-05-27 00:01:34
【问题描述】:
我有一个容器,我想用指向 C 类的指针填充它。但是,我宁愿使用 Boost shared_ptr 而不是哑指针。
我将容器声明为container<C*>,但随后出现此错误:
no known conversion for argument 1 from ‘boost::shared_ptr<C>’ to ‘C* const&’
我应该如何声明容器采用 boost 共享 ptrs?如果可能的话,我也希望它采用愚蠢的指针。
更新:从回复看来,容器确实必须声明为采用智能指针,不能使其同时采用智能或哑指针 .也就是说,没有从聪明到愚蠢或反之的强制。对吗?
【问题讨论】:
-
你可能真的想要一个 Boost ptr 容器。
-
container<boost::shared_ptr<C>>... 这就是您要找的东西吗?如果没有,您能否展示一些您正在尝试做的代码。 -
请创建一个MCVE,没有导致它们的代码的错误消息众所周知是无用的。
-
似乎是重复。你在发布之前用谷歌搜索过这个吗? stackoverflow.com/questions/4577838/…
-
因此,共享ptr 和非共享ptr 在构造、复制和销毁方面具有非常不同的行为。确切地说,您希望您的容器对这种智能指针和哑指针的混合做什么?当你访问元素#17(比如)时,你想访问什么类型?复制容器时会发生什么?什么代码决定了哑指针指向的资源的生命周期?你有混合智能指针和哑指针的商业案例吗?为什么要为您的智能指针共享 ptr?这些不是反问句。
标签: c++ boost smart-pointers