복사 생성의 이점 : 메모리 단위로 1대1 복사를 하기 때문에 객체를 하나씩 할당하는것보다 속도가 빠름

class CObj
{
public:
	CObj(int _iA):m_iA(_iA){}
	CObj(const CObj& rhs)
	{
		m_iA = rhs.m_iA;
		cout << "복사 생성자" << endl;
	}
private:
	int m_iA;
};


int main()
{
	CObj obj1(100);
	CObj obj2(obj1); 1번
}
1. 먼저 만들어진 객체를 매개 변수로 전달하여 객체를 생성 할 경우 복사 생성자 호출
2. 함수의 매개변수 형식이 객체 형식인 경우 (call by value)
3. 함수의 반환 타입이 객체 형식인 경우

**얕은 복사와 깊은 복사

얕은 복사
class CObj
{
public:
	CObj(const CObj& rhs)
	{
		m_pName = rhs.m_pName;     포인터 값만 복사함
	}
private:
	char* m_pName;
}
복사본의 소멸자에서 m_pName을 delete를 하게 되면 댕글링 포인터 발생
일반적인 상황에서는 얕은 복사로 충분하지만 경우에 따라서 깊은 복사 필요(포인터 멤버변수, 동적할당 유무)