带有构造函数参数的单身人士

时间:2016-05-24 15:06:14

标签: c++ xcode design-patterns singleton

虽然尝试创建一个类的单个实例,需要全局访问和修改到它的名字,但我有一些语法相关的问题(我认为)与我的实现文件中的代码。

编译时,我在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;
}

2 个答案:

答案 0 :(得分:2)

您忘记了staticsingle的{​​{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)任何人都可以随时获得单身对象,而无需检查是否有人已经创建了它 - 这意味着每个人需要知道参数,显然它们必须是相同的,否则单身人士的行为会有所不同,具体取决于谁创造了它。

相关问题