基于C++Shared_PTR的单例是什么导致链接错误? [英] C++ shared_ptr based singletone what causes link error?

查看:80
本文介绍了基于C++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

但获取链接错误:

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)

我想退还的Shared_PTR有什么问题?是否应将其设置为函数作用域静态变量?

推荐答案

static boost::shared_ptr<connector> instance;

在类定义中只有一个声明。您似乎没有它的定义。此定义位于类定义之外。

但是,您可能更愿意这样做:

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(){}
};

在本例中instance定义为Instance的内联函数定义中的静态函数局部对象。它的好处在于,这种初始化在C++11中保证是线程安全的。

这篇关于基于C++Shared_PTR的单例是什么导致链接错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆