复制构造函数使用“new”调用

时间:2015-02-04 09:33:27

标签: c++ copy-constructor

我对C ++很陌生。

我已经读过,在将对象作为对象传递给函数或者从函数返回对象以及在赋值的初始化中调用复制构造函数。 在这种情况下是否也可以调用,假设D有复制构造函数?

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

2 个答案:

答案 0 :(得分:4)

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

在这种情况下,它被明确地称为:

D* pd2 = new D(*pd1); //pd1 points to D object

在这种情况下,它被隐含地称为:

D pd2 = *pd1; //pd1 points to D object

如果使用explicit说明符,则无法隐式调用复制构造函数。

http://en.cppreference.com/w/cpp/language/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;调用复制构造函数。