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中是线程安全的.