2

使用 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
4

2 回答 2

3

构造boost::shared_ptr函数需要一个指针,你传递给它一个引用。您可能还想更改自己的构造函数以获取指针,或者CStorage使用引用在堆上创建一个新对象。

于 2013-09-03T13:07:53.177 回答
1

正如@Joachim 建议的那样,您的 ctor 需要一个指针。
传递共享指针(或弱指针,取决于您的用例)可能会更好,这会将指针保留在内存中。

于 2013-09-03T13:16:40.947 回答