๊ธฐ์กด ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋
๊ฐ ํ์์ด๋ ์ฐธ์กฐ ํ์์ด๋์ ๋ฐ๋ผ ๋ณต์ฌ๊ฐ ๋๋์ด์ง๋ค.
์์ ๋ณต์ฌ(Shallow Copy)
ํ ๊ฐ์ฒด์ ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณต์ฌํ๋๋ฐ ๊ฐ์ฒด๊ฐ ํฌ์ธํฐ ํ์ ์ ๋ฉค๋ฒ๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด ์ฃผ์ ๊ฐ๋ง ๋ณต์ฌ๋๋ค. ์ด๋, ์๋ณธ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ ๊ฒฝ์ฐ ์ฐธ์กฐํ๊ณ ์๋ ํฌ์ธํฐ๋ ์ด๋ฏธ ์ญ์ ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋๊ธ๋ง ํฌ์ธํฐ๊ฐ ๋ ์ ์๋ค.
- ์ฐธ์กฐ ํ์ ๊ฐ์ฒด๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ์ํ์ง ์์ผ๋ฉด ์์ ๋ณต์ฌ๊ฐ ์ผ์ด๋๋ค.
๊น์ ๋ณต์ฌ(Deep Copy)
๋ชจ๋ ๋ฉค๋ฒ ๋ณ์๋ฟ๋ง ์๋๋ผ ํฌ์ธํฐ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด์๋ ๋ณต์ฌ๋ฅผ ์ํํ์ฌ ๋ณต์ฌํ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ ๊ฐ์ฒด๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋๋ค.
- ๊ฐ ํ์ ๊ฐ์ฒด๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊น์ ๋ณต์ฌ๋ฅผ ํ๋ค.
struct Test {
char* ptr;
};
void shallow_copy(Test& src, Test& dest) {
dest.ptr = src.ptr;
}
void deep_copy(Test& src, Test& dest) {
dest.ptr = new char[strlen(src.ptr) + 1];
strcpy(dest.ptr, src.ptr);
}