关于复制构造函数的问题

时间:2010-06-14 20:57:39

标签: c++

我有这堂课:

class A {
private:
 int player;
public:
 A(int initPlayer = 0);
 A(const A&);
 A& operator=(const A&);
 ~A();
 void foo() const;
};

我有包含这一行的函数:

 A *pa1 = new A(a2);

有人可以解释究竟发生了什么,当我调用A(a2)编译器调用复制构造函数或构造函数时,提前感谢

3 个答案:

答案 0 :(得分:5)

假设a2A的实例,则调用复制构造函数。

它将调用operator new来获取对象的动态内存,然后它将复制 - 构造一个新对象到内存中,然后返回指向该内存的指针。

答案 1 :(得分:4)

当您致电新A(a2);

它将调用其中一个构造函数 它调用哪一个取决于a2的类型。

如果a2是int,则调用默认构造函数。

A::A(int initPlayer = 0);

如果a2是A类型的对象,则将调用复制构造函数。

A::A(const A&);

答案 2 :(得分:1)

这取决于a2的数据类型。如果是int或可以隐式转换为int的类型,则会调用默认的c'tor(A(int player=0)),如果a2是{的实例{1}}或可以隐式转换为A的类型(即子类的实例)将调用复制c'tor。