c++ - 使用引用变量复制构造函数

标签 c++

我有一个如下所示的类,我想为它编写一个复制构造函数。 我需要为此创建一个深拷贝构造函数。以下代码正确打印 x 和 c,但此处 y 的值是垃圾。

#include "stdafx.h"
#include <string.h>
class MyClass
{
public:

 MyClass(int a) : y(a) {
 }
 MyClass(const MyClass &myClass) : y(myClass.y)
 {
  x = myClass.x;
  c = new char[10];
  strcpy(c, myClass.c);
 }

  int x;
  char *c;
  int &y;

};

int _tmain(int argc, _TCHAR* argv[])
{
 MyClass m1(0);
 m1.c = new char[10];
 strcpy(m1.c, "gourav");
 m1.x = 10;
 m1.y = m1.x;

 MyClass m2 = m1;

 printf("x=%d\nc=%s\ny=%d\n", m2.x, m2.c, m2.y);
 return 0;
}

最佳答案

在您的代码中,y 是引用。您正在创建 MyClass m1(0),因此 m1.y 指向一个临时 变量 - 0。您只需不得这样做..我不知道为什么你的y成员是引用.. ??无论如何,如果你希望它是那样的,那么就这样做:

//..
int a = 10;
MyClass m1(a);
//..

无论如何,这很丑陋..而且很危险,如果您不知道自己实际上在做什么..您真的应该有一个很好的理由这样做。

此外,重新设计您的类(class)及其成员的姓名..

所以,问题根本不在复制构造函数中..

关于c++ - 使用引用变量复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969621/

相关文章:

c++ - 如何用sfinae检查,type是否有operator()?

C++ const 与引用成员的正确性

c++ - 在STL容器中优先搜索的C++优雅方式

c++ - 一段时间后 zmq 套接字不工作

c++ - 自定义 Qt 小部件

C++ "system(command)"不适用于 NetBeans/Windows

python - 将 Python 函数作为 Boost.Function 参数发送

c++ - OpenSSL 解密 - EVP_DecryptFinal_ex 失败

C++ - std::map.insert() 段错误

c++ - std::ifstream::open() 不工作