대입 연산자
2024. 3. 21. 17:56ㆍ프로그래밍/C++
단순 대입 연산자는 구조체나 클래스에도 적용됩니다.
이때 기억해야 할 점은 기본적으로 단순 대입을 시도하면 얕은 복사가 수행된다는 점이다.
이를 해결하기 위해선 단순 대입 연산자의 동작 방식을 수정해야 한다.
//단순 대입 연산자 함수를 정의한다
CMyData& operator=(const CMyData &rhs)
{
*m_pnData = *rhs.m_pnData;
//객체 자신에 대한 참조 반환
return *this;
}
#include <iostream>
using namespace std;
class CMyData
{
public:
CMyData(int nParam)
{
m_pnData = new int;
*m_pnData=nParam;
}
CMyData(const CMyData &rhs)
{
cout<<"CMyData(const CMyData &)"<<endl;
m_pnData = new int;
*m_pnData = *rhs.m_pnData;
}
~CMyData()
{
delete m_pnData;
}
//단순 대입 연산자 함수를 정의한다.
CMyData& operator=(const CMyData &rhs)
{
*m_pnData = *rhs.m_pnData;
return *this;
}
int GetData()
{
if(m_pnData != NULL)
return *m_pnData;
return 0;
}
private:
int *m_pnData = nullptr;
};
int main()
{
CMyData a(10);
CMyData b(20);
a=b;
cout<<a.GetData()<<endl;
return 0;
}
만약 a=b operator가 다음 과 같이 정의된다면 a와 b모두 같은 주소를 가리키기 때문에 a의 소멸자 동작할 때 포인터가 가리키는 값을 해제시키지 못한 b로 인해 에러가 날 것이다
CMyData& operator=(const CMyData &rhs)
{
m_pnData = rhs.m_pnData;
return *this;
}
'프로그래밍 > C++' 카테고리의 다른 글
대입 vs 복사 (0) | 2024.03.22 |
---|---|
Pass by value VS Pass by reference (0) | 2024.03.21 |
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) (0) | 2024.03.20 |
복사 생성자 (0) | 2024.03.20 |
Dynamic vs Static (0) | 2024.03.19 |