我对C ++很陌生。
我已经读过,在将对象作为对象传递给函数或者从函数返回对象以及在赋值的初始化中调用复制构造函数。 在这种情况下是否也可以调用,假设D有复制构造函数?
D* pd1 = new D;
D* pd2 = new D(*pd1);
答案 0 :(得分:4)
是强>
可以隐式或显式调用复制构造函数。
在这种情况下,它被明确地称为:
D* pd2 = new D(*pd1); //pd1 points to D object
在这种情况下,它被隐含地称为:
D pd2 = *pd1; //pd1 points to D object
如果使用explicit
说明符,则无法隐式调用复制构造函数。
答案 1 :(得分:1)
你可以这样试试:
class copy {
public:
copy(int a = 1) :i(a) {}
copy(copy &c) :i(c.i) { std::cout << "I'm copied!"; }
private:
int i;
};
int main() {
copy c;
// here the copy constructor is called
// the string literal will be printed
auto p = new copy(c);
}
很清楚地看到&#34;新副本(c)&#34;调用复制构造函数。