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 = (char*)malloc(strlen(src.ptr) + 1);
strcpy(dest.ptr, src.ptr);
}
shallow_copy
๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฒด ์์ฑ๊ณผ ์ญ์ ์ ๊ด๋ จ๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๊ฐ ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ ๋ฐ์ํ ์ ์๋ค.
์ฆ, ์์ ๋ณต์ฌ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค์ค๋ก ๋ฌด์์ ํ๋ ์ง
์ ์ดํดํ๊ณ ์๋ ์ํฉ์์ ์ฃผ์ํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค
๋๋ถ๋ถ, ์์ ๋ณต์ฌ๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ง ์๊ณ ์, ๋ณต์กํ ์๋ฃ๊ตฌ์กฐ์ ๊ดํ ์ ๋ณด๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ค. ์์ ๋ณต์ฌ๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ์ญ์ ํ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
์ค์ ๋ก ์์ ๋ณต์ฌ๋ ์ค๋ฌด์์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค. ๋๋ถ๋ถ ๊น์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ, ๋ณต์ฌ๋๋ ์๋ฃ๊ตฌ์กฐ์ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ๋์ฑ ๊น์ ๋ณต์ฌ๊ฐ ํ์ํ๋ค.
- ์ฝ๋ฉ ์ธํฐ๋ทฐ ์์ ๋ถ์