class T
{};
class UseT
{
public:
//...
boost::shared_ptr<const T> getT() const
{
return m_t;
}
private:
boost::shared_ptr<T> m_t;
};
问题&GT;当我们从boost::shared_ptr<T>
转换为boost::shared_ptr<const T>
时使用的规则是什么?
答案 0 :(得分:1)
shared_ptr<T>
有一个转换构造函数,如果从shared_ptr<U>
转换为U*
有效,则允许从T*
构造它,反映内置指针的方式工作
template<typename U>
shared_ptr(const shared_ptr<U>& other);
(对于std::shared_ptr
,只有在U*
可转换为T*
的情况下才能调用构造函数,但对于boost::shared_ptr
,我不确定它是否会检查,或者您只是因无效转换而遇到编译器错误。)
由于T*
可以转换为const T*
,因此构造函数允许您从shared_ptr<const T>
创建shared_ptr<T>
。