在复制构造函数中调用赋值运算符

2024-01-04

这种复制构造函数的实现有一些缺点吗?

Foo::Foo(const Foo& i_foo)
{
   *this = i_foo;
}

我记得,在一些书中建议从赋值运算符调用复制构造函数并使用众所周知的交换技巧,但我不记得为什么......


是的,这是一个坏主意。所有用户定义类型的成员变量都会首先被初始化,然后立即被覆盖。

交换技巧是这样的:

Foo& operator=(Foo rhs) // note the copying
{
   rhs.swap(*this); //swap our internals with the copy of rhs
   return *this;
} // rhs, now containing our old internals, will be deleted 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在复制构造函数中调用赋值运算符 的相关文章

  • 在运行时检查 GCC 版本

    我需要找出 C 程序执行过程中 运行时 可用的 系统中安装的 GCC 版本 主要版本和次要版本 意思是 以编程方式提取可用 gcc 的版本 就像我在 shell 中输入 gcc version 一样 但在 c 程序中 The GNUC an
  • 在 VB.NET 中将类标记为静态

    正如刚刚在最近的一篇文章中所说question https stackoverflow com questions 135759 why cant i inherit iodirectory and answer https stackov
  • 使用 cout 打印字符数组的全部内容

    我对 C 很陌生 只是 Java 的背景不太好 并且对如何打印 char 数组的全部内容感到困惑 我相信我需要使用循环 并将循环基于数组的长度 但我的编译尝试没有成功 这就是我现在所拥有的 在此先感谢您的帮助 include
  • size_t 是否足够大以表示任何类型的大小? [复制]

    这个问题在这里已经有答案了 Is size t保证足够大来表示任何类型的大小 根据this https en cppreference com w c types size t参考 size t可以存储理论上可能的对象的最大尺寸 任何类型
  • 以十六进制打印字符串? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这种以十六进制打印字符串的简短方法是
  • 检查 ASP.NET Web 应用程序在运行时是否处于调试模式的首选方法?

    在编译时我可以做这样的检查 if DEBUG Log something endif 但最好检查一下是否debug false 是在运行时在 Web config 中设置的吗 HttpContext IsDebuggingEnabled h
  • 在opencv中将三个灰度[R,G,B]图像合并为单个彩色图像

    我有 3 个使用 split 函数创建的灰度图像 现在我想重新生成彩色图像 我尝试了以下代码 但它不起作用 我得到的结果图像仍然是灰度的 cv Mat R cv imread home r secret R png 0 cv Mat G c
  • 如何使用 MonoTouch c# 以编程方式获取联系人?

    如何获取 iPhone 中的联系人 我需要从 iPhone 联系人中获取所有属性 如何使用MonoTouch以编程方式实现 ABAddressBook iPhoneAddressBook new ABAddressBook ABPerson
  • 具有相反结合顺序的 C++ 重载运算符

    很难想出一个标题 我的母语不是英语 struct A int value A operator int i const A a a value value i return a int main A a a value 2 a a 2 re
  • C# 中 a+=1 和 a=a+1 的区别

    我发现在C 中a 1不等于a a 1 例如 以下代码编译时不会出现任何错误 字节 b 10 b 5 而下面的代码有编译错误 字节 b 10 b b 5 有人可以告诉我为什么吗 Because b 5变成整数 Int32 主要是因为有重载的可
  • 无法打开包含的文件

    我使用的是 BorlandC 和 Windows 7 当我编译该文件时 出现以下错误 Error Assign C Unable to open include file stdio h Error Assign C Unable to o
  • IIS / .Net 只允许对给定用户会话进行单个并发响应

    这是我的问题 我们有一个 Net 4 5 Web 表单应用程序 由于服务器端的大量数据访问和操作 应用程序中的某些页面需要很长时间才能加载 如果用户在页面完成加载之前关闭浏览器选项卡 然后打开新选项卡 则新选项卡中对应用程序的任何请求都将挂
  • 如何在 .NET 中使 ComboBox 不可编辑?

    我想要一个 仅选择 ComboBox它提供了一个项目列表供用户选择 应在文本部分禁用打字ComboBox控制 我最初对此进行谷歌搜索 发现了一个过于复杂 误导性的建议来捕捉KeyPress event 要使 ComboBox 的文本部分不可
  • 模拟测试方法

    尝试模拟在另一个方法中调用的方法 code part public virtual bool hello string name int age string lastName GetLastName public virtual stri
  • 如何修改.NET Core中的文件访问控制

    我正在尝试更改 NET Core 中文件的权限 然而 似乎FileInfo https msdn microsoft com en us library system io fileinfo setaccesscontrol v vs 11
  • C中的字符串读取

    我对 C 中的字符串读取没有任何疑问 字符串读取函数 如 gets scanf read fscanf fgets 哪个 C 函数可以从任何文件中安全地读取字符串 Or 哪个 C 函数可以可靠地读取文件中的字符串 如果输入函数将缓冲区的长度
  • 使用DataContractSerializer进行序列化,但无法反序列化回来

    我有以下两个功能 public static string Serialize object obj DataContractSerializer serializer new DataContractSerializer obj GetT
  • SerialPort.Read(byte[], int32, int32) 不是阻塞的,但我想要它 - 我该如何实现?

    我正在编写一个用于与测试设备通信的接口 设备通过串行端口进行通信 并以已知的字节数响应我发送的每个命令 我当前的结构是 发送命令 读回指定字节数 继续申请 但是 当我使用 SerialPort Read byte int32 int32 时
  • 使用 .NET 2.0 解析 JSON

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我有一个用 C 编写的应用程序 带有 NET Framework 2 0 版本 不幸的是 我无法选择更新到较新版本的 NET
  • 在一个 Linq to Entities 查询中多次实现“like”运算符

    我们有一个字符串列表 我们需要通过该列表过滤结果 示例将查找所有 SSN 以 465 496 或 497 加上 x 更多 开头的学生 List

随机推荐