함수에서 객체를 반환할때

  • 복사되지 않을까? 에 대한 신경 쓰지 않아도 된다.
    컴파일러가 알아서 복제 생략을 발생한다.

  • 전문가 c++ p. 145


  • 아래의 코드를 실행하면, 복사가 발생하지 않는 다는 것을 확인할 수 있다.
#include <iostream>

using namespace std;
#include <numeric>


#include <array>

class Object
{
public : 
	Object(int n)
		: p{ new int(n) }
	{
		cout << "constru" << endl;
	}
	Object(const Object& _obj)
		: p(new int(*_obj.p))
	{
		cout << "copy constr" << endl;
	}
	const void Print() const { cout << *p << " " << p << endl; }
private : 
	int* p;
};

Object foo(int _data)
{
	Object obj(_data);
	cout << &obj << endl;
	obj.Print();
	return obj;
	//return Object(_data);
}

int main()
{
	Object ob1 = foo(4);

	cout << "out! " << endl;
	cout << &ob1 << endl;
	ob1.Print();
	//Object ob2 = ob1;


	return 0;
}

대입할 경우에는 역시 적용되지 않음

  • 지금의 경우, 디폴트 대입 연산자가 호출되는 것을 확인할 수 있다.

profile
🔥🔥🔥

0개의 댓글