C++
깊은 복사와 얕은 복사 (1)
코다람쥐
2021. 12. 24. 00:06
https://www.youtube.com/watch?v=EuYdn_STq9U&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=71
1. 얕은 복사와 깊은 복사
int main() {
int* a = new int(5);
int* b = new int(3);
a = b;
delete a;
delete b;
}
이렇게하면 a = b를 할 때 주소가 덮어 씌워지기 때문에 메모리 누수가 발생할 뿐더러 delete에서 a가 b의 메모리를 해재해버려서 해제할 메모리가 없는 delete b;에서 런타임 에러도 발생한다.
그래서 a = b와 같이 코드를 작성해주는것을 주의해야 한다.
a = b를 참조만 복사하는 얕은 복사라고 하고,
*a = *b를 값을 복사하는 깊은 복사라고 한다.
2. String 클래스 구현해보기 with 동적할당
#include <iostream>
using namespace std;
class String {
public:
String() {
strData = NULL;
len = 0;
}
String(const char* str) {
len = strlen(str);
strData = new char[len + 1];
strcpy(strData, str); // 깊은 복사
}
~String() {
delete[] strData;
}
char* GetStrData() const {
return strData;
}
int GetLen() const {
return len;
}
private:
char* strData;
int len;
};
int main()
{
String s;
}