函数返回对象未执行深层复制。为什么foo()返回的temp没有被深层复制?

时间:2017-05-24 11:50:05

标签: c++ copy-elision

#include<iostream>
using namespace std;

class A {
  int k;
  int *ptr;
public:
  A(int a):k(a) { 
    cout<<"ctor\n";
    ptr = new int[k];
    for(int i = 0; i < k; i++) {
      *(ptr + i) = i*i*i;
    }
  }
  A(const A &obj) {
    cout<<"copy ctor\n";
    k == obj.k;
    ptr = new int[k];
    for(int i = 0; i < k; i++) {
      *(ptr + i) = i*i;
    }
  } 
  void show() {
    for(int i = 0; i < k; i++) {
      cout<<*ptr++<<" ";
    }
  }
};

A foo() {
  A temp(5);
  return temp;
}

int main() {
  A obj = foo();
  obj.show();
  return 0;
}

**不复制foo()返回的临时对象。在这个但不是复制构造函数中调用普通构造函数。任何人都可以指出我错在哪里。**

0 个答案:

没有答案