使用 "new" 调用复制构造函数
copy constructor calling using "new"
我对 C++ 很陌生。
我读到复制构造函数在将对象作为参数传递给函数时或从函数返回对象时以及在使用赋值初始化变量时被调用。
在这种情况下是否也可以调用,假设 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
如果使用 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);
}
很明显"new copy(c)"调用了拷贝构造函数
我对 C++ 很陌生。
我读到复制构造函数在将对象作为参数传递给函数时或从函数返回对象时以及在使用赋值初始化变量时被调用。 在这种情况下是否也可以调用,假设 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
如果使用 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);
}
很明显"new copy(c)"调用了拷贝构造函数