가능한 중복 :복사 생성자가 호출하지 않은 이유는 무엇입니까?
#include <iostream> #include <new> using namespace std; class test { int *p; public: test operator=(test a); test() { p = new int [2]; cout <<"Default Constructor was done here." << "\n"; } test(const test &a) { p = new int [2]; this->p[0] = a.p[0]; this->p[1] = a.p[1]; cout << "Copy Constructor was done here." << "\n"; } ~test() { delete p; cout << "Destructor was done here." << "\n"; } int set (int a, int b) { p[0] = a; p[1] = b; return 1; } int show() { cout << p[0] << " " << p[1] << "\n"; return 2; } }; test test::operator=(test a) { p[0] = a.p[0]; p[1] = a.p[1]; cout << "Operator = was done here" << "\n"; return *this; } test f(test x) { x.set(100, 100); return x; } int main() { test first; test second; first.set(12, 12); //f(first); //second = first; second = f(first); first.show(); second.show(); getchar(); return 0; }
복사 생성자 만 세 번을 불렀다 :
Why copy constructor is not called in this case?
내가 코드를 다음습니까? 왜? 우리가 이해한다면, 우리는 4 개의 복사본을 만들었습니다 (func에 객체 보내기, func는 값을 반환, operator =는 operator =에 값을 반환).
많은 양의 복제물을 복사하십시오. –