我尝试使用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看到它应该有效,但在我的情况下它不起作用:(。
提前感谢您的所有答案和评论。
答案 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是完全自然的,只会调用具有合适参数列表的构造函数。