禁用复制构造函数

新手上路,请多包涵

我有一堂课:

 class SymbolIndexer {
protected:
  SymbolIndexer ( ) { }

public:
  static inline SymbolIndexer & GetUniqueInstance ( )
  {
    static SymbolIndexer uniqueinstance_ ;
    return uniqueinstance_ ;
  }
};

我应该如何修改它以禁用代码,例如:

 SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );

并且只允许以下代码:

 SymbolIndexer & ref_symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );

原文由 Humble Debugger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您可以将复制构造函数设为私有并且不提供任何实现:

 private:
    SymbolIndexer(const SymbolIndexer&);

或者在 C++11 中,明确禁止它:

 SymbolIndexer(const SymbolIndexer&) = delete;

原文由 R. Martinho Fernandes 发布,翻译遵循 CC BY-SA 4.0 许可协议

SymbolIndexer( const SymbolIndexer& ) 设为私有。如果您要分配给参考,则不是在复制。

原文由 Aaron Klotz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题