基于C++ shared_ptr的单一单一导致链接错误的原因是什么?

myW*_*SON 2 c++ singleton design-patterns shared-ptr

所以我试试这段代码:

#ifndef TRANSMITTER_H
#define TRANSMITTER_H
class connector
{   
public:
    static boost::shared_ptr<connector> Instance(){
        if(!instance)
        {
            instance = boost::shared_ptr<connector>(new connector());
        }
        return instance;
    }
private:
    connector(){}
    static boost::shared_ptr<connector> instance;
};
#endif //TRANSMITTER_H
Run Code Online (Sandbox Code Playgroud)

但是得到链接错误:

Error   3   error LNK2001: unresolved external symbol "private: static class boost::shared_ptr<class connector> connector::instance" (?instance@connector@@0V?$shared_ptr@Vconnector@@@boost@@A)
Run Code Online (Sandbox Code Playgroud)

我想返回shared_ptr有什么问题?我要把它作为功能范围的静态变量吗?

sel*_*tze 13

这个

static boost::shared_ptr<connector> instance;
Run Code Online (Sandbox Code Playgroud)

在你的类定义中只是一个声明.你似乎没有的是它的定义.该定义不在类定义之内.

但是,您可能更喜欢这样做:

class connector
{   
public:
    connector(connector const&) = delete;
    connector& operator=(connector const&) = delete;

    static boost::shared_ptr<connector> Instance()
    {
        static boost::shared_ptr<connector> instance (new connector);
        return instance;
    }
private:
    connector(){}
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下instance,定义为内联函数定义中的静态函数本地对象Instance.关于它的好处是这种初始化保证在C++ 11中是线程安全的.