我想将{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()
答案 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
突然发生变化,其他“股东”将非常感到惊讶