首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在Singleton类中私有化赋值运算符

需要在Singleton类中私有化赋值运算符
EN

Stack Overflow用户
提问于 2011-07-12 23:06:00
回答 7查看 5.1K关注 0票数 7

有人能证明在单例类实现中将赋值运算符私有化的必要性吗?

通过将Singleton& operator=(Singleton const&);设置为私有,它解决了什么问题?

代码语言:javascript
复制
class Singleton {
public:
  static Singleton& Instance() {
    static Singleton theSingleton;
    return theSingleton;
  }

private:
  Singleton(); // ctor hidden
  Singleton(Singleton const&); // copy ctor hidden
  Singleton& operator=(Singleton const&); // assign op. hidden
  ~Singleton(); // dtor hidden
};
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-12 23:08:37

单例赋值只是一种无意义的操作,因为它只有一个对象应该存在。

将赋值操作符设置为私有有助于诊断无意义的代码,如下所示:

代码语言:javascript
复制
Singleton& a = Singleton::Instance();
Singleton& b = Singleton::Instance();
a = b; // Oops, accidental assignment.
票数 11
EN

Stack Overflow用户

发布于 2011-07-12 23:08:01

只有一个单例。复制它没有任何意义。你需要做两件事才能使拷贝正常,而且大多数拷贝操作员为了安全起见需要检查self==&other

这个private技巧是一个黑客技巧。C++0x does it better.

开始咆哮..。

我认为单例在术语上是矛盾的。它是一种愚蠢的想法的产物,即所有东西都必须是对象才能被封装。这也是让Java的Math.sin(x)等人感到头疼的地方。

如果"singleton“仅仅是名称空间中的一组自由函数,那么您的工作将会更简单。单例的任何私有“成员”都可以隐藏在.cpp的匿名命名空间中。实现了封装,而且您没有繁琐的额外语法。

代码语言:javascript
复制
MyNamespace :: foo ();

而不是

代码语言:javascript
复制
MyClass :: instance () .foo ();
票数 2
EN

Stack Overflow用户

发布于 2011-07-12 23:09:31

如果只需要一个实例,则复制构造函数应该是私有的。赋值运算符访问说明符并不重要,因为无论如何都不可能使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6666413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档