728x90
* 얕은복사: 의존적인 복사
#include<iostream>
using namespace std;
class MyArray {
public:
int size;
int* data;
MyArray(int size)
{
this->size = size;
data = new int[size];
}
MyArray(const MyArray& other);
};
MyArray::MyArray(const MyArray& other) {
this->size = other.size;
this->data = other.data;
}
int main() {
MyArray buffer(10);
buffer.data[0] = 2;
MyArray clone = buffer;
buffer.data[0] = 3;
cout << "clone.data[0] = " << clone.data[0] << endl;
return 0;
}
복사한 대상자가 바뀌면 복사한 객체도 같이 변하게 됨
*깊은복사: 객체가 가진 모든 멤버를 복사
새로이 동적할당을 받고, 원본의 데이터를 복사함
#include<iostream>
using namespace std;
class MyArray {
public:
int size;
int* data;
MyArray(int size){
this->size = size;
data = new int[size];
}
//원래 있던 것을 지움.
~MyArray() {
if (this->data == NULL) {
delete[]data;
}
}
MyArray(const MyArray& other) {
//모든걸 복사한 후 새로운 객체 생성
this->size = other.size;
this->data = new int[size];
for (int i{ 0 }; i < other.size; i++) {
this->data[i] = other.data[i];
}
}
};
int main() {
MyArray buffer(10);
buffer.data[0] = 2;
MyArray clone = buffer;
buffer.data[0] = 3;
cout << "clone.data[0] = " << clone.data[0] << endl;
return 0;
}
-> 복사한 대상자가 바껴도 복사된 객체는 아무런 영향을 받지 않음
728x90
'CS > C++' 카테고리의 다른 글
이동 의미론 ( move semantics) (0) | 2023.12.14 |
---|---|
L value 와 R value (0) | 2023.12.14 |
c++ typedef vs using 키워드 차이점 (0) | 2023.12.14 |
C++ template 장단점 (0) | 2023.12.14 |
c++ 캐스팅 (0) | 2023.12.14 |