使用clang-425.0.27(基于LLVM3.2svn)编译此代码段:
class CStorage
{};
typedef boost::shared_ptr< CStorage > AccessorPtr;
class CTest
{
public:
CTest( const CStorage &rAccessor )
: m_Accessor( rAccessor ){}
private:
AccessorPtr m_Accessor;
};
获取编译错误:
**error**: no matching constructor for initialization of 'AccessorPtr' (aka 'shared_ptr<CStorage>')
: m_Accessor( rAccessor ){}
**note**: candidate constructor (the implicit copy constructor) not viable: no known conversion from
'const FNPNS::TSM::CDirectBlockAccessor' to 'const boost::shared_ptr<FNPNS::TSM::CDirectBlockAccessor>' for 1st argument
template<class T> class shared_ptr
答案 0 :(得分:3)
boost::shared_ptr
构造函数想要一个指针,你传给它一个引用。您可能希望更改自己的构造函数以获取指针,或者使用引用在堆上创建新的CStorage
对象。
答案 1 :(得分:1)
正如@Joachim建议你的ctor期待一个指针 传递一个共享指针(或一个弱指针,取决于你的用例)可能会更好,这将把指针保存在内存中。