我有这堂课:
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)
编译器调用复制构造函数或构造函数时,提前感谢
答案 0 :(得分:5)
假设a2
是A
的实例,则调用复制构造函数。
它将调用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。