虽然尝试创建一个类的单个实例,需要全局访问和修改到它的名字,但我有一些语法相关的问题(我认为)与我的实现文件中的代码。
编译时,我在return语句中出错:
对类型Single的非const左值引用不能绑定到不相关类型Single的值。
single.h
class Single{
public:
std::string getSingleName();
void updateSingleName(std::string name);
void operator=(Single const&) = delete;
Single(Single const&) = delete;
static Single& getInstance(const std::string& name);
private:
Single(std::string singleName);
std::string name;
};
Single.cpp
Single& Single::getInstance(const std::string& name){
Single single(std::string name);
return single;
}
答案 0 :(得分:2)
您忘记了static
中single
的{{1}}关键字。要返回引用,您需要一个持久对象。我们使用静态
getInstance
请注意,由于Single& Single::getInstance(const std::string& name){
static Single single(name); // get rid of the parameter type otherwise this is a function
return single;
}
现在为single
,因此它只构建一次,对static
的任何后续调用都将返回与上一次调用相同的对象。
如果您需要具有多个具有不同名称的单个对象,那么您将需要除单身之外的其他内容。可能只是摆脱复制构造函数并使其可移动将适用于您的用例。
答案 1 :(得分:1)
单例和构造函数参数的组合并没有任何意义。单身人士的观点是(1)它最多存在一次,(2)任何人都可以随时获得单身对象,而无需检查是否有人已经创建了它 - 这意味着每个人需要知道参数,显然它们必须是相同的,否则单身人士的行为会有所不同,具体取决于谁创造了它。