复制构造函数问题

时间:2010-08-03 14:56:58

标签: c++ constructor copy-constructor

我尝试使用copy constructor:

X y = X();

但是没有调用复制构造函数。我正在使用g ++ 4.1.0。我在类中设置了X(const X&)和X(x&)构造函数。

这应该可行吗?或者我在代码中做了一些非常基本的问题?

我的课程代码是

class A
{
 public:
  int i;

  A(int ii)
  {
   i = ii;
  }

  A(const A&)
  {
   i = 5;
  }

  A(A&)
  {
   i = -1;
  }

  A()
  {
   i = 5000;
  }
};

当我使用它时 A a = A();A a = A(100);,它不起作用,但当我使用A a(b);A a = b;时,它可以正常工作。

我错过了什么?我根据wikipedia看到它应该有效,但在我的情况下它不起作用:(。

提前感谢您的所有答案和评论。

4 个答案:

答案 0 :(得分:13)

在某些情况下,允许编译器忽略对复制构造函数的调用。从临时文件初始化对象就是其中之一。在这种情况下,临时只是就地构造而不是构造临时,然后将其复制到命名对象。

您可以通过构造命名对象然后复制该对象来调用复制构造函数:

X x;
X y = x;

答案 1 :(得分:1)

X y = X();

调用默认构造函数。复制构造函数是对要复制的实例的引用。

复制构造函数的目的是获取相同类型的另一个对象,并复制它。其他一切都不是复制构造函数。

答案 2 :(得分:0)

复制构造函数由语句X x(y);X x = y;调用。

当您调用X x = X();时,将调用默认构造函数。

当您调用X x = X(100);时,将调用带有一个参数的构造函数。这些不是复制构造函数。

答案 3 :(得分:-1)

使用另一个对象初始化对象时,将调用复制构造函数:)。在您的第一个示例中,不会调用复制ctors是完全自然的,只会调用具有合适参数列表的构造函数。