使用“复制构造函数调用”;新"; 我对C++很陌生.

使用“复制构造函数调用”;新"; 我对C++很陌生.,c++,copy-constructor,C++,Copy Constructor,我读过,当将对象作为参数传递给函数时,或者从函数返回对象时,以及在初始化带有赋值的变量时,都会调用复制构造函数。 假设D有复制构造函数,在这种情况下也可以调用它吗 D* pd1 = new D; D* pd2 = new D(*pd1); 是。 可以隐式或显式调用复制构造函数 在这种情况下,它被显式地称为: D* pd2 = new D(*pd1); //pd1 points to D object D pd2 = *pd1; //pd1 points to D object 在这种情况下

我读过,当将对象作为参数传递给函数时,或者从函数返回对象时,以及在初始化带有赋值的变量时,都会调用复制构造函数。 假设D有复制构造函数,在这种情况下也可以调用它吗

D* pd1 = new D;
D* pd2 = new D(*pd1);
是。

可以隐式或显式调用复制构造函数

在这种情况下,它被显式地称为:

D* pd2 = new D(*pd1); //pd1 points to D object
D pd2 = *pd1; //pd1 points to D object
在这种情况下,它被隐式地称为:

D* pd2 = new D(*pd1); //pd1 points to D object
D pd2 = *pd1; //pd1 points to D object
如果复制构造函数使用
explicit
说明符,则不能隐式调用它


您可以这样尝试:

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);
}
类副本{
公众:
复制(inta=1):i(a){

copy(copy&c):i(c.i){std::cout
pd1
的类型是什么?这是否意味着
D pd2=*pd1;中的
pd2
也被分配了堆?