gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:25:39 25 4
gpt4 key购买 nike

所以我试试这段代码:

#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 的单例是什么导致链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13431362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com