boost :: shared_ptr <const t =“”> to boost :: shared_ptr <t> </t> </const>

时间:2010-06-10 01:07:18

标签: c++ boost casting const shared-ptr

我想将{const}从boost::shared_ptr中删除,但我boost::const_pointer_cast不是答案。 boost::const_pointer_cast需要const boost::shared_ptr<T>,而不是boost::shared_ptr<const T>。让我们放弃强制性的“你不应该这样做”。我知道......但我需要这样做......那么最好/最简单的方法是什么?

为清楚起见:

boost::shared_ptr<const T> orig_ptr( new T() );

boost::shared_ptr<T> new_ptr = magic_incantation(orig_ptr);

我需要知道magic_incantation()

2 个答案:

答案 0 :(得分:9)

boost::const_pointer_cast 您要使用的功能:

boost::shared_ptr<const int> ci(new int(42));
boost::shared_ptr<int> i(boost::const_pointer_cast<int>(ci));

这不适合你吗?我使用Boost 1.43和Visual C ++ 2010 C ++ 0x实现进行了测试 - 没有任何问题。

答案 1 :(得分:2)

请注意,如果共享const T突然发生变化,其他“股东”将非常感到惊讶