C++中的私有拷贝构造函数有什么用

2024-02-12

人们为什么要定义私有复制构造函数?

什么时候将复制构造函数和赋值运算符设为私有是一个好的设计?

如果类中没有作为唯一对象(如文件名)的指针或句柄的成员,那么在其他情况下,私有复制构造函数是个好主意吗?

同样的问题也适用于赋值运算符。鉴于大多数 C++ 都围绕对象复制和引用传递,是否有涉及私有复制构造函数的良好设计?


一个用例是单例模式 where 一个类只能有一个实例。在这种情况下,您需要将构造函数和赋值运算符设置为私有,这样就无法创建多个对象。创建对象的唯一方法是通过 GetInstance() 函数,如下所示。

// An example of singleton pattern
class CMySingleton
{
public:
  static CMySingleton& GetInstance()
  {
    static CMySingleton singleton;
    return singleton;
  }

// Other non-static member functions
private:
  CMySingleton() {}                                  // Private constructor
  ~CMySingleton() {}
  CMySingleton(const CMySingleton&);                 // Prevent copy-construction
  CMySingleton& operator=(const CMySingleton&);      // Prevent assignment
};

int main(int argc, char* argv[])
{
  // create a single instance of the class
  CMySingleton &object = CMySingleton::GetInstance();

  // compile fail due to private constructor
  CMySingleton object1;
  // compile fail due to private copy constructor
  CMySingleton object2(object);
  // compile fail due to private assignment operator
  object1 = object;

  // ..
  return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中的私有拷贝构造函数有什么用 的相关文章

随机推荐

  • 向 TinyMCE 文本区域添加边框半径

    是否可以为 TinyMCE 的文本区域添加边框半径 我的输入字段等上有圆角 但我无法让它在我的文本区域上工作 这有点杀了我 可能是因为 TinyMCE 将它变成了 IFRAME 有没有办法解决 多谢 一种解决方案是使用editor css设
  • Tomcat JDBC 连接池:testOnBorrow 与 testWhileIdle

    由于各种原因 池中的连接可能会变得无效 服务器连接超时 网络问题 我的理解是 Tomcat JDBC 连接池不对其向应用程序提供的连接的有效性提供任何保证 为了防止 实际上只是降低风险 从池中获取无效连接 解决方案似乎是配置连接验证 验证连
  • 编写对空格敏感的解析器规则,同时从词法分析器中跳过 WS

    我在处理空白时遇到一些麻烦 在以下语法摘录中 我设置了词法分析器 以便解析器跳过空格 ENTITY VAR user resource INT DIGIT DIGIT ID LETTER LETTER DIGIT SPECIAL ENTIT
  • 引用的定义相互矛盾

    我正在学习 C 中的引用 特别是 我了解到引用不是实际对象 相反 它们引用了其他一些对象 也就是说 引用只是其他对象的别名 然后我遇到了this https isocpp org wiki faq references overview r
  • 如何让iOS UIWebView正确显示手机网站?

    我是 iOS 应用程序开发新手 我刚刚尝试使用UIWeb视图在我的应用程序中显示移动网站 但不太成功 我所做的只是我在一些谷歌搜索过程中发现的一些最小的 Xcode 项目配置和编码 使用以下命令在 Xcode 中创建一个新的 iOS 应用程
  • Chrome 扩展程序登录最佳实践

    我正在创建一个 Chrome 扩展程序弹出窗口并需要登录 现在 我将使用用户名和密码进行自己的身份验证 但扩展中的最佳实践是什么 这是我的想法 我将使用帖子登录远程服务器 取回一个令牌 我会将其保留在本地存储中一段时间 弹出窗口中还应该有一
  • 如何将 MVC3 Hello World 应用程序部署到本地主机并配置 IIS

    我在将 MVC3 应用程序部署到本地主机时遇到一些问题 我正在寻找构建 ASP MVC 3 应用程序并将其部署到本地系统的详细信息 我尝试过部署这个 但遇到了一个又一个问题 我不想单独跟踪每个问题 无论如何我可能都必须这样做 我想为自己和看
  • 在 Mongodb 中搜索和替换?

    给定一组 100 个帖子 每个帖子都有一个包含帖子内容的 body 属性 并且该内容内有图像 url 例如 http example com wp content uploads 5 jpg http example com wp cont
  • 具有 async/await 风格函数的 async.queue

    我正在尝试创建一个函数 该函数从对象数组构建队列 然后通过调用多个函数来处理每个对象 处理函数是异步函数 在需要排队之前 我使用异步 等待模式实现了这些函数 我认为这是必要的 因为每个都依赖于前一个的输出 并且我不想有大量嵌套的 Promi
  • Ansible:如果有多个“extra_vars”文件,变量顺序/优先级是什么?

    在这个关于 Can extra vars接收多个文件 https stackoverflow com questions 31800060 原发帖者回答了这个问题 说多个 vars 文件可以通过使用多个来完成 extra vars参数 我的
  • 在 PowerShell 中创建新的 System.Collections.Generic.Dictionary 对象失败

    PowerShell 版本 5 x 6 我正在尝试创建一个新对象System Collections Generic Dictionary 但失败了 我尝试了以下 版本 gt dictionary new object System Col
  • Java 中的 Files.move() 给出 FilesSystemException 错误,因为文件夹“正在被另一个进程使用”,但事实并非如此

    我想将单个文件移动到另一个文件夹 但我不能 因为 它正在被另一个进程使用 这是我的代码 static File myFile new File C filepath static File myFolder new File C folde
  • UserPrincipal.FindByIdentity (System.DirectoryServices.AccountManagement) 中的 .NET 4.5 错误

    在 NET 4 5 下测试 NET 4 0 应用程序时 我们遇到了一个问题FindByIdentity方法用于UserPrincipal 以下代码在 NET 4 0 运行时中运行时有效 但在 NET 4 5 中运行时失败 Test publ
  • 如何处理多个代表

    我的应用程序中有一个几乎可以完成所有操作的视图 我喜欢这样 然而问题是它实现了 5 或 6 个不同的委托 这看起来有点混乱 我的问题是 视图控制器是否必须实现所有委托 或者有什么方法可以将代码分离到不同的文件中 无需进行重大重组或重写 这是
  • Service Worker skipWaiting 无法激活当前等待的软件

    描述 我们使用 sw precache 来预先缓存脚本 因此为了更新脚本 我们提供了重新加载选项 为此 我们正在监听工作人员消息 以跳过等待新安装的服务工作人员 原因未知 我们没有得到正确的结果 导入脚本 GETTING OLD SW re
  • 在 Powershell 中获取 ADFS 令牌

    我们有一个 ADFS 2 0 环境 用于将我们的 Active Directory 域与 Office 365 联合 最近 我们遇到了一个问题 集群停止响应 这反过来又破坏了所有用户的电子邮件 日历访问 由于我们目前没有对 ADFS 进行任
  • Odoo15 - ModuleNotFoundError:没有名为“PyPDF2”的模块

    我是 Odoo 的新手 我使用 pyenv 来托管 odoo 和所有依赖项 全部在 odoo 系统用户下 我能够启动 odoo 服务 systemctl status odoo 15 odoo 15 service Odoo15 Loade
  • 使用 PDO 的 mysql_num_rows 替代方案

    现在我有一个 PHP 文件 它执行 MYSQL 查询 然后计算行数 如下所示 count mysql num rows result if count 1 message array status gt ok else message ar
  • 列表理解:为每个项目返回两个(或更多)项目[重复]

    这个问题在这里已经有答案了 是否可以为列表理解中的每个项目返回 2 个 或更多 项目 我想要什么 示例 f x g x for x in range n 应该返回 f 0 g 0 f 1 g 1 f n 1 g n 1 因此 可以用一些东西
  • C++中的私有拷贝构造函数有什么用

    人们为什么要定义私有复制构造函数 什么时候将复制构造函数和赋值运算符设为私有是一个好的设计 如果类中没有作为唯一对象 如文件名 的指针或句柄的成员 那么在其他情况下 私有复制构造函数是个好主意吗 同样的问题也适用于赋值运算符 鉴于大多数 C