Skip to content

Latest commit

ย 

History

History
59 lines (36 loc) ยท 1.4 KB

[Cpp] shallow copy vs deep copy.md

File metadata and controls

59 lines (36 loc) ยท 1.4 KB

[Cpp] ์–•์€ ๋ณต์‚ฌ vs ๊นŠ์€ ๋ณต์‚ฌ


shallow copy์™€ deep copy๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์•Œ์•„๋ณด์ž


์–•์€ ๋ณต์‚ฌ(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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์‚ญ์ œ์— ๊ด€๋ จ๋œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์–•์€ ๋ณต์‚ฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์Šค์Šค๋กœ ๋ฌด์—‡์„ ํ•˜๋Š” ์ง€
์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

๋Œ€๋ถ€๋ถ„, ์–•์€ ๋ณต์‚ฌ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ ์„œ, ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์–•์€ ๋ณต์‚ฌ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.


์‹ค์ œ๋กœ ์–•์€ ๋ณต์‚ฌ๋Š” ์‹ค๋ฌด์—์„œ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€๋ถ€๋ถ„ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋ณต์‚ฌ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฉด ๋”์šฑ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.



[์ฐธ๊ณ  ์ž๋ฃŒ]

  • ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ ์™„์ „๋ถ„์„