从boost :: shared_ptr <t>转换为boost :: shared_ptr <const t =“”> </const> </t>

时间:2013-02-14 17:09:49

标签: c++ boost

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>时使用的规则是什么?

1 个答案:

答案 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>