1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | ///////////// //대입 연산자// //////////// class CCopyStudy { public: CCopyStudy(int nParam) { m_pnData = new int; *m_pnData = nParam; } //얕은 복사의 오류를 범하지 않기 위해 값을 복사한 깊은 복사 형태// CCopyStudy(const CCopyStudy &rhs) { m_pnData = new int; *m_pnData = *rhs.m_pnData; } //단순대입 연산자를 사용했을시 얕은 복사 방지를 위한 코드 추가// CCopyStudy& operator=(const CCopyStudy &rhs) { *m_pnData = *rhs.m_pnData; return *this; } ~CCopyStudy() { delete m_pnData; } int GetData() { if(m_pnData != NULL) { return *m_pnData; } return 0; } private: int *m_pnData = nullptr; } int main(void) { CCopyStudy a(10); //매개변수를 통한 복사// //얕은 복사를 방지 하기 위한 깊은 복사 형태를 주의 해야 됨// CCopyStudy b(a); //단순 대입 연산자를 사용 하게 될 경우 오류가 발생// //단순 대입 연산자는 얕은 복사를 사용하게 되어서 메모리 해제시 오류가 발생// //operator 단순 대입 연산자를 사용 해야 됨// CCopyStudy c(20); a = c; //a.operator(c); //사용 방법이 2가지가 있음// return 0; } | cs |
복사생성자
- 단순 대입 연산자 2018.03.26
단순 대입 연산자
2018. 3. 26. 15:19