, , , , ,

[SOLVED] Csed 232 object-oriented programming assignmentย  4 โ€“ template & stl

$25

File Name: Csed_232_object_oriented_programming_assignment___4_____template___stl.zip
File Size: 659.4 KB

5/5 - (1 vote)

์ฃผ์˜ ์‚ฌํ•ญ โ— ํด๋ž˜์Šค ์„ ์–ธ ๋ฐ ์ •์˜๋ฅผ main.cpp ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— ์„ ์–ธ ๋ฐ ์ •์˜์˜ ์œ„์น˜์— ๋Œ€ํ•œ ์ œ์•ฝ์€ ์—†์Šต๋‹ˆ๋‹ค. โ— STL ๋ฐ shared_ptr ์„ ์ œ์™ธํ•œ ๋ชจ๋“  C++ ๋ฌธ๋ฒ•์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. โ— ๋ฌธ์ œ์—์„œ ์ œ๊ณตํ•œ ํ˜•์‹์„ ์ค€์ˆ˜ํ•˜๊ณ  ๊ฐ ๋ฌธ์ œ๋ณ„ ์ถ”๊ฐ€์ ์ธ ์„ธ๋ถ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ— ๋ฌธ์ œ์— ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์†Œ๋ฉธ์ž(Destructor)์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ— ๋ฌธ์ œ ์กฐ๊ฑด์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฌธ์ œ์˜ ์„ธ๋ถ€ ์กฐ๊ฑด์„ ๊ผผ๊ผผํžˆ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ์  โ— ์ œ์ถœ ๊ธฐํ•œ์—์„œ ํ•˜๋ฃจ(24 ์‹œ๊ฐ„) ๋Šฆ์„ ๋•Œ๋งˆ๋‹ค 20%์”ฉ ๊ฐ์  โ—‹ 1 ์ผ(20%) , 2 ์ผ(40%), โ€ฆ 5 ์ผ(100%) โ— ์ปดํŒŒ์ผ์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ 0 ์  ์ œ์ถœ๋ฐฉ์‹ ์ฑ„์ ์€ Windows Visual Studio 2022(์œˆ๋„์šฐ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ) ๋ฐ Ubuntu 20.04(lts)์™€ gcc version 9.4.0 (๋งฅ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ) ํ™˜๊ฒฝ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. VS ๋กœ ์ž‘์—…ํ–ˆ์„ ๊ฒฝ์šฐ ์ž‘์—…ํ•˜์‹  ํ™˜๊ฒฝ์ด ์žˆ๋Š” visual studio ํ”„๋กœ์ ํŠธ ํด๋”์— Report ๋ฅผ ํฌํ•จํ•˜์—ฌ zip ํŒŒ์ผ๋กœ ์••์ถ• ํ›„ ์ œ์ถœํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. (x64 ๋ฐ .vs ํด๋”๋Š” ์ „๋ถ€ ์ง€์›Œ์ฃผ์‹ญ์‹œ์˜ค) ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋งฅ ์ด์šฉ์ž์˜ ๊ฒฝ์šฐ ์†Œ์Šค ์ฝ”๋“œ, ๋ณด๊ณ ์„œ, Makefile ์„ ํฌํ•จํ•œ ํด๋”๋ฅผ ์••์ถ•ํ•ด์„œ ์ œ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํด๋”๋ช…์€ โ€˜ํ•™๋ฒˆโ€™์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์‹œ๊ณ , Report ๋Š” docx ๋‚˜ pdf ํ˜•์‹์œผ๋กœ ์ œ์ถœํ•ด์ฃผ์„ธ์š”. ๋ฐ˜๋“œ์‹œ PLMS ๋ฅผ ํ†ตํ•ด ์ œ์ถœํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ์ œ์ถœ์€ ์ธ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ 2 / 11 ๊ณตํ†ต ์ฑ„์  ๊ธฐ์ค€ 1. ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋Šฅ โ— ํ”„๋กœ๊ทธ๋žจ์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด์„œ ์˜ฌ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š”๊ฐ€? 2. ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ โ— ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”๊ฐ€? โ— ๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์„ธ๋ถ€ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜์˜€๋Š”๊ฐ€? โ— ์„ค๊ณ„๋œ ๋‚ด์šฉ์ด ์š”๊ตฌ๋œ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ์ ˆํžˆ ๊ตฌํ˜„๋˜์—ˆ๋Š”๊ฐ€? 3. ํ”„๋กœ๊ทธ๋žจ ๊ฐ€๋…์„ฑ โ— ํ”„๋กœ๊ทธ๋žจ์ด ์ฝ๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑ๋˜์—ˆ๋Š”๊ฐ€? โ— ๋ณ€์ˆ˜ ๋ช…์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด๊ฐ€? โ— ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ฃผ์„์„ ์ž˜ ๋ถ™์˜€๋Š”๊ฐ€? 4. ๋ณด๊ณ ์„œ ๊ตฌ์„ฑ ๋ฐ ๋‚ด์šฉ, ์–‘์‹ โ— ๋ณด๊ณ ์„œ๋Š” ์ ์ ˆํ•œ ๋‚ด์šฉ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ž˜ ์ž‘์„ฑ๋˜์—ˆ๋Š”๊ฐ€? โ— ๋ณด๊ณ ์„œ์˜ ์–‘์‹์„ ์ž˜ ๋”ฐ๋ž๋Š”๊ฐ€? ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋‚˜ ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ณต์‚ฌ(copy)ํ•˜๊ฑฐ๋‚˜ ๊ฐ„๋‹จํžˆ ์ˆ˜์ •ํ•ด์„œ ์ œ์ถœํ•˜๋ฉด ๋ฌด์กฐ๊ฑด โ€˜Fโ€™ ํ•™์ ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€์ •ํ–‰์œ„๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ํ•™๊ณผ์—์„œ ์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์ธ ๋ถˆ์ด์ต์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ 3 / 11 Shared Pointer & Image Library Objective ๋ณธ ๊ณผ์ œ์—์„œ๋Š” Standard Template Library ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ shared_ptr ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด๊ณ  ์ด๋ฅผ ์ด์šฉํ•œ ์˜์ƒ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ด„์œผ๋กœ์จ template ๊ณผ STL ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ธ๋‹ค. ๋ฌธ์ œ 1 โ€“ SharedPtr 1.1. ๊ฐœ์š” ๋ณธ ๊ณผ์ œ์˜ 1 ๋ฒˆ ๋ฌธ์ œ๋Š” shared_ptr ์˜ ๊ฐ„์†Œํ™”๋œ ๋ฒ„์ „์ธ SharedPtr ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณธ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ(smart pointer)๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด C++์˜ Standard Template Library (STL)์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‚ฌ์šฉ์ด ๋๋‚œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋™์ ํ•ด์ œํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ ์–ธํ•˜๋ฉฐ ์‚ฌ์šฉ์ด ๋๋‚œ ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” delete ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€์„ ์œ ๋ฐœํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ˜„์ƒ์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋กœ ์ธํ•œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผ์ด delete ๋ฅผ ํ•  ํ•„์š” ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋Ÿฌํ•œ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค. C++์˜ STL ์€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ shared_ptr ์ด๋‹ค. shared_ptr ์€ memory ํ—ค๋”ํŒŒ์ผ์„ include ํ•˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. shared_ptr ์€ ๋™์  ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ํ˜„์žฌ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์ธ์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐ ์นด์šดํŠธ (reference count) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ด์šฉํ•œ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๋™์ž‘ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ•์˜ ์ž๋ฃŒ โ€œ16. The string Class and the Standard Template Library (1)โ€๊ณผ ๋ณธ ๋ฌธ์„œ์˜ ๋ถ€๋ก์„ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค. 1.2. ๊ณผ์ œ ์š”๊ตฌ์‚ฌํ•ญ ๋ณธ ๊ณผ์ œ์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” SharedPtr ์˜ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โšซ SharedPtr ์ƒ์„ฑ โ—ผ SharedPtr ์€ template class ๋กœ ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ์˜ template parameter ๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋งŒ์•ฝ MyClass ๋ผ๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ SharedPtr ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. โ—† SharedPtr ptr; โ—ผ ๋˜ํ•œ ์•„๋ž˜์˜ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ๊ฐ™์ด SharedPtr ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋™์  ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ด์šฉํ•˜์—ฌ SharedPtr ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํŽ˜์ด์ง€ 4 / 11 โ—† SharedPtr ptr(new MyClass()); โ—ผ SharedPtr ๊ฐ์ฒด๋ฅผ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค๋ฅธ SharedPtr ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. โ—† SharedPtr ptr(new MyClass()); SharedPtr ptr2(ptr); โšซ SharedPtr ๋Œ€์ž… ์—ฐ์‚ฐ โ—ผ SharedPtr ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ SharedPtr ๊ฐ์ฒด์— ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‘ SharedPtr ๊ฐ์ฒด๋Š” ๊ณตํ†ต๋œ ๋™์ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. โ—† SharedPtr ptr(new MyClass()); SharedPtr ptr2; ptr2 = ptr; โ—ผ SharedPtr ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๋™์ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋กœ ๋Œ€์ž…ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ SharedPtr ๊ฐ์ฒด์— ์ƒˆ๋กญ๊ฒŒ ๋™์ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SharedPtr ์˜ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ๋Œ€์ž…ํ•ด์•ผ ํ•œ๋‹ค. โ—† SharedPtr ptr; ptr = new MyClass(); // must raise a compile error!! ptr = SharedPtr(ptr); // ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•จ. โšซ SharedPtr ๊ฐ์ฒด์˜ ์ด์šฉ โ—ผ SharedPtr ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค (*, ->). ๋‘ ์—ฐ์‚ฐ์ž ๋ชจ๋‘ const ๋ฒ„์ „๊ณผ non-const ๋ฒ„์ „์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. โ—† SharedPtr ptr(new MyClass); ptr->some_method(); (*ptr).some_method(); const SharedPtr const_ptr(new MyClass); const_ptr->some_const_method(); (*const_ptr).some_const_method(); โ—ผ SharedPtr ๊ฐ์ฒด๋Š” ํ•„์š”์‹œ ์ผ๋ฐ˜ ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. โ—† SharedPtr ptr(new MyClass); MyClass* ptr2 = (MyClass*)ptr; const MyClass* ptr3 = (const MyClass*)ptr; ํŽ˜์ด์ง€ 5 / 11 โšซ ์ž๋™ ๋™์  ํ•ด์ œ โ—ผ SharedPtr ๊ฐ์ฒด๋กœ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์ž๋™์œผ๋กœ ๋™์  ํ•ด์ œ๋œ๋‹ค. ์•„๋ž˜๋Š” ์ด ๋™์ž‘์— ๋Œ€ํ•œ ์˜ˆ์ด๋‹ค. โ—† SharedPtr ptr(new MyClass(1)); // ์ฒซ๋ฒˆ์งธ ๊ฐ์ฒด ๋™์ ํ• ๋‹น SharedPtr ptr2(ptr); ptr = SharedPtr(new MyClass(2)); // ๋‘๋ฒˆ์งธ ๊ฐ์ฒด ๋™์ ํ• ๋‹น. ์ฒซ๋ฒˆ์งธ ๊ฐ์ฒด๋Š” ptr2 ์—์„œ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ณ„์† ์œ ์ง€๋จ ptr2 = SharedPtr(new MyClass(3)); // ์„ธ๋ฒˆ์งธ ๊ฐ์ฒด ๋™์ ํ• ๋‹น. ์ฒซ๋ฒˆ์งธ ๊ฐ์ฒด๋Š” ๋” ์ด์ƒ ์•„๋ฌด SharedPtr ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž๋™์œผ๋กœ ๋™์ ํ•ด์ œ. โšซ ๋™์ ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ์ง€์› โ—ผ ๋ณธ ๊ณผ์ œ์—์„œ ์ž‘์„ฑํ•˜๋Š” SharedPtr ๊ฐ์ฒด๋Š” ๋ฐฐ์—ด์˜ ๋™์ ํ• ๋‹น๋„ ์ง€์›ํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋™์ ํ• ๋‹น์„ ์œ„ํ•ด new ์™€ delete ๋Œ€์‹  new[]์™€ delete[] ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด SharedPtr ํ…œํ”Œ๋ฆฟ์€ ๋‘๋ฒˆ์งธ template parameter ๋กœ deallocation ์„ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ตฌํ˜„์€ ๋ณธ ๊ณผ์ œ์— ๊ฐ™์ด ์ œ๊ณต๋œ skeleton code ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค. โ—† template void ArrayDeallocator(T* ptr) { delete[] ptr; } SharedArray<int,ArrayDeallocator> ptr(new int[N]); // ๋‘๋ฒˆ์งธ template parameter ๋กœ Array ๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘๋ฒˆ์งธ template parameter ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด๋ฅผ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๊ฐ€ default parameter ๋กœ ์ง€์ •๋œ๋‹ค. โ—ผ ๊ฐ™์ด ์ œ๊ณต๋œ skeleton code ์—์„œ๋Š” ๋ฐฐ์—ด์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ SharedArray ๋ผ๋Š” ํƒ€์ž…์„ ์ œ๊ณตํ•œ๋‹ค. โ—† Template using SharedArray = SharedPtr<T,ArrayDeallocator >; โ—ผ ๋ณธ ๊ณผ์ œ์—์„œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋™์ ํ• ๋‹น๋œ ๋ฐฐ์—ด์˜ ์ง€์›์„ ์œ„ํ•œ ๋ฐฐ์—ด ์›์†Œ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž์ด๋‹ค. ([ ]) โ—† SharedArray ptr(new MyClass[10]); ptr[0].some_method(); const SharedArray ptr(new MyClass[10]); ptr[2].some_const_method(); ํŽ˜์ด์ง€ 6 / 11 โšซ ๊ธฐํƒ€ ์š”๊ตฌ ์‚ฌํ•ญ โ—ผ SharedPtr ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€์  ๋˜๋Š” ๋‹ค๋ฅธ ์ธก๋ฉด์—์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ณด๊ณ ์„œ์— ๊ธฐ์ˆ ํ•  ๊ฒƒ. โ—ผ ์ฒจ๋ถ€๋œ ์ฝ”๋“œ ์ค‘ SharedPtr_test.cpp ์€ SharedPtr ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์ด ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ํ•™์ƒ์ด ์Šค์Šค๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋“ค์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณธ ์ฝ”๋“œ๋Š” ์ฐธ๊ณ ์šฉ์œผ๋กœ ์ œ๊ณต๋œ ๊ฒƒ์ผ ๋ฟ ๋ณธ์ธ์˜ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์ž˜ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์ง์ ‘ ํ™•์ธํ•ด ๋ณผ ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ์กฐ๊ต๋Š” ํ•ด๋‹น sharedPtr_test.cpp ๊ฐ€ ์•„๋‹Œ ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ฐธ๊ณ ๋กœ SharedPtr ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์ด ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค๋ฉด SharedPtr_test.cpp ์ปดํŒŒ์ผ ํ›„ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. test_SharedPtr() MyClass object(100) created: 1 MyClass object(200) created: 2 ============= ptr1: 200 ptr2: 100 ptr3: 100 ============= Dealloc Object MyClass object(100) destroyed: 1 ============= ptr1: 200 ptr2: 200 ptr3: 200 ============= MyClass object(300) created: 2 ============= const_ptr: 300 const_ptr: 300 ============= pp: 200 Dealloc Object MyClass object(300) destroyed: 1 Dealloc Object MyClass object(200) destroyed: 0 test_SharedArray() ============= arr1[0]: 1 arr2[0]: 1 arr3[0]: 1 ============= ============= arr1[0]: 2 arr2[0]: 3 arr3[0]: 3 ============= Dealloc Array ============= arr1[0]: 2 arr2[0]: 2 arr3[0]: 2 ============= Dealloc Array ํŽ˜์ด์ง€ 7 / 11 ๋ฌธ์ œ 2 โ€“ Image 2.1. ๊ฐœ์š” ๋ณธ ๊ณผ์ œ์˜ 2 ๋ฒˆ ๋ฌธ์ œ๋Š” ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ์ ์ธ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค ์ž‘์„ฑ์ด๋‹ค. ์ด๋ฏธ์ง€๋Š” ์ปดํ“จํ„ฐ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”ฝ์…€๋“ค์˜ 2 ์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๊ฐ๊ฐ์˜ ํ”ฝ์…€์—๋Š” ๋ฐ๊ธฐ ์ •๋ณด๋‚˜ ์ƒ‰์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ ํ”ฝ์…€์— Red, Green, Blue ์˜ ์„ธ๊ฐ€์ง€ ์ƒ‰์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ (grayscale) ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ ํ”ฝ์…€์— ๋ฐ๊ธฐ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ‰์ƒ ์ •๋ณด๋‚˜ ๋ฐ๊ธฐ ์ •๋ณด๋Š” 0 ๋ถ€ํ„ฐ 255 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ–๋Š” 8 bit unsigned integer ํƒ€์ž…์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์ด๋ฏธ์ง€๋Š” ํ”ฝ์…€๋งˆ๋‹ค 8 ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€๋Š” ํ”ฝ์…€์˜ ๊ฐ ์ƒ‰์ƒ๋งˆ๋‹ค 8 ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด 24 ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฏธ์ง€์˜ ํ”ฝ์…€๋งˆ๋‹ค ์ˆ˜์น˜ ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” 8 ๋น„ํŠธ ์ •์ˆ˜ํ˜• ํƒ€์ž…์€ ๊ฐ์ข… ์ˆ˜์น˜ ์—ฐ์‚ฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— float ์ด๋‚˜ double ๊ณผ ๊ฐ™์€ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜ํ˜• ํƒ€์ž…์„ ์ด์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ณธ ๊ณผ์ œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท ์ค‘ ํ•˜๋‚˜์ธ BMP ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ์ฝ์–ด์„œ ๊ฐ„๋‹จํ•œ ์˜์ƒ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑฐ์นœ ํ›„ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ BMP ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ๋ณธ๋‹ค. ๋˜ํ•œ BMP ํŒŒ์ผ๋กœ ์ฝ์€ ๊ทธ๋ฆผ์„ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋„ ์ž‘์„ฑํ•œ๋‹ค. 2.2. ๊ณผ์ œ ์š”๊ตฌ์‚ฌํ•ญ ๋ณธ ๊ณผ์ œ์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” Image ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โšซ Image ์ƒ์„ฑ โ—ผ Image ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์€ ๋‹ค์–‘ํ•œ ํ”ฝ์…€ ํƒ€์ž…์„ ์ง€์›ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ”ฝ์…€ ํƒ€์ž…์„ ํ…œํ”Œ๋ฆฟ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š”๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โ—† Image img; // ํ”ฝ์…€๊ฐ’์œผ๋กœ 8 ๋น„ํŠธ unsigned integer ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์ด๋ฏธ์ง€ ๊ฐ์ฒด ์ƒ์„ฑ. uint8_t ๋Š” 8 ๋น„ํŠธ unsigned integer ํƒ€์ž…์œผ๋กœ cstdint ์— ์„ ์–ธ๋˜์–ด ์žˆ์Œ. Image imgf; // ํ”ฝ์…€๊ฐ’์œผ๋กœ float ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์ด๋ฏธ์ง€ ๊ฐ์ฒด ์ƒ์„ฑ Image<RGB> rgbimg; // ํ”ฝ์…€๊ฐ’์œผ๋กœ 8 ๋น„ํŠธ ์ •์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” RGB image ์ƒ์„ฑ. RGB<> ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์€ ์ œ๊ณต๋œ skeleton code ์ฐธ๊ณ  โšซ Image ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ ์ œ๊ณตํ•˜๋Š” public interface โ—ผ ์ƒ์„ฑ์ž โ—† Image() // default constructor ํŽ˜์ด์ง€ 8 / 11 โ—† Image(size_t _width, size_t _height); // ์ด๋ฏธ์ง€ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น (_width x _height) โ—† Image(size_t _width, size_t _height, const PixelType& val); // ์ด๋ฏธ์ง€ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•˜๊ณ  val ๊ฐ’์„ ์ด์šฉํ•ด ๋ชจ๋“  ํ”ฝ์…€๊ฐ’ ์ดˆ๊ธฐํ™” โ—† Image(const Image& img); // copy constructor โ—ผ ์†Œ๋ฉธ์ž โ—† ~Image(); // ํŠน๋ณ„ํžˆ ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š์Œ. โ—ผ ์—ฐ์‚ฐ์ž โ—† ๋Œ€์ž… ์—ฐ์‚ฐ์ž (operator=)โ€“ ๊ฐ™์€ ํ”ฝ์…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋Œ€์ž…๋ฐ› ๋Š”์—ฐ์‚ฐ์ž. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ. โšซ const Image a; Image b; b = a; โ—† ๋ฐฐ์—ด ์•ก์„ธ์Šค ์—ฐ์‚ฐ์ž โšซ ์ด๋Š” ๋”ฐ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์Œ. skeleton ์ฝ”๋“œ์— ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋žŒ โ—ผ ๊ธฐํƒ€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ โ—† size_t width() const; // ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ ๊ธธ์ด ๋ฆฌํ„ด โ—† size_t height() const; // ์ด๋ฏธ์ง€์˜ ์„ธ๋กœ ๊ธธ์ด ๋ฆฌํ„ด โšซ ๊ธฐํƒ€ ์š”๊ตฌ ์‚ฌํ•ญ โ—ผ Image ํด๋ž˜์Šค์˜ ํ”ฝ์…€ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์€ ๋™์  ํ• ๋‹น์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ๋ฌธ์ œ 1 ์—์„œ ๊ตฌํ˜„ํ•œ SharedArray ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ๊ฒƒ. โ—ผ Image ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€์  ๋˜๋Š” ๋‹ค๋ฅธ ์ธก๋ฉด์—์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ณด๊ณ ์„œ์— ๊ธฐ์ˆ ํ•  ๊ฒƒ. โ—ผ ๋ณธ ๊ณผ์ œ์— ๊ฐ™์ด ์ œ๊ณต๋œ image_test.cpp ๋Š” Image ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ์˜์ƒ ์ฒ˜๋ฆฌ ์˜ˆ์ œ ์ฝ”๋“œ๋กœ Image ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์ด ์ž˜ ๊ตฌํ˜„๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ์™ธ์—๋„ ๋ณธ์ธ์ด ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ์˜์ƒ ์ฒ˜๋ฆฌ ์˜ˆ์ œ๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋ฉด ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฅผ ๋ณด๊ณ ์„œ์— ๊ธฐ์ˆ ํ•  ๊ฒƒ. Image ํด๋ž˜์Šค ์—ญ์‹œ ์กฐ๊ต๋Š” image_test.cpp ์— ์ œ์‹œ๋œ ์ฝ”๋“œ ์™ธ์—๋„ ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ํŽ˜์ด์ง€ 9 / 11 Dealloc Array Dealloc Array Dealloc Array Dealloc Array Dealloc Array 2. ASCII conversion 2.1. Grayscale conversion Dealloc Array 2.2. Downsampling Dealloc Array Dealloc Array Dealloc Array 2.3. ASCII art drawing OOOOOOOOOOOOOOOOOOOOOOOOOpEo3Cii}t5SVOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOde())JJJJJJJ7(uSpOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOx7)))))JJJJJJJ777iZhOOOOOOOO OOOOOOOOOOOOOOOOOOOOptv)))))))JJJJJJJ77777Ij6pOd]p OOOOOOOOOOOOOOOOOOOp3vvv)))))))JJJJJJJ77J7777(((CO OOOOOOOOOOOOOOOOOOOevvv)v))))))))JJJJJJJ7777777(ZO OOOOOOOOOOOOOOOOOOkvvvvvv)))))))))JJJJJJJJ77777|9O OOOOOOOOOOOOOOOOOOfTvvvvvv)v)))))))JJJJJJJJ7777yOO OwOOOOOOOOOOOOOOO6TTTvvvvvvv))))))))JJJJJJJJ77YOOO OFfwOOOOOOOOOOOOp5TTTvvvvvvv))v)))))))JJJJJJIqVdOO OZ(7[4OOOOOOOOOOVLTTTTvvvvvvT+v))))))))Jfnj6dyidOO OVI77F2OOOOOOOOOOT=zTTTTvvT!^Lv)))))))}Z[3}FJJfOOO Op3JJJ)19OOOOOOOOSk1vTTTTzCjpy)vv)))))7))JJJJJEOOO Olv7JJ))J5pOOOOOOSz^5TTTT3E/vV[)v)))))))))JJJeOOOO Ov)JJ))vvTFSOOOOOuโ€œ[)JTTo/.`xjvvvvv)))))))|yOOOOO Oy()))vvTTTL19OOd97vtfff7}I`=htvvvvv))))Jt2pOOOOOO OOpP))vvTLLLsv5pqFo3fffffTuShovvvvvvv))eSaZ3dOOOOO OOOOe(vTTLLsLLL|ZLvifFF7FJTTTTTTvvvvvv}|)))ZOOOOOO OOOOpSSFLLssLLLLsLLL|+`.FTTTTTTTTvvvvvvv))fpOOOOOO OOOOOOOpYJLLLLLLLLsLTFJi7LTTTTTTTvvvvvvvvf4OOOOOOO OOOOOOOOOVZ)LLLLLLLsLLTLLLTTTTTTTTTTvvvvnpOOOOOOOO OOOOOOOOOOOVx|LLLLLLLLLLLLLLTTTTTTTTvv}wOOOOOOOOOO OOOOOOOOOOOOOOwl)sLLJLs))LLLTTTTTTT(uwOOOOOOOOOOOO OOOOOOOOOOOOOOOOpFsl{exfCfLLLLLsJo9OOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOI)CC{LtJ3LLLLLLLsiqOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOO[LeCLFLl3LLLLLsLLLL5OOOOOOOOOOOOO OOOOOOOOOOOOOOOOOYsYTJ5L}1LsLLL7sLsLL[OOOOOOOOOOOO OOOOOOOOOOOOOOOOOETIlLs7f3LLLLLPIsLTTvYOOOOOOOOOOO OOOOOOOOOOOOOOOOO9TITlIfs1LLsss9p3LTvvJkOOOOOOOOOO OOOOOOOOOOOOOOOOOOv{I3f337LLLLLdOpIvv)JuOOOOOOOOOO OOOOOOOOOOOOOOOOOO{ssLsLLLssLLs4OOV{)J(EOOOOOOOOOO OOOOOOOOOOOOOOOOOOuLsLsLLLLLLLsVOOO6(C3EOOOOOOOOOO OOOOOOOOOOOOOOOOOOjLLLLLLLLLLLspOOOO]o5OOOOOOOOOOO OOOOOOOOOOOOOOOOOOPsLLLLLLLLLLLpOOOOO4OOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOl)iultt|ss)JiypOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOk|fOOOO4}LJ(J7fVOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOC|VOOOOpnv((3pOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO5|qOOOOOOSC(apOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOVh2(e22]]2ESx|oOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOE5ZlI[55555555CF5OOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOphqE]ayjjjya2Sk9OOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOpppOOOOOOOOOOOOOOOOOOOOOOO Dealloc Array Dealloc Array Dealloc Array Dealloc Array Dealloc Array ํŽ˜์ด์ง€ 10 / 11 ๋ถ€๋ก โ€“ ์ฐธ์กฐ ์นด์šดํŒ… (Reference counting) STL ์˜ shared_ptr ์€ ์ฐธ์กฐ ์นด์šดํŒ…์„ ์ด์šฉํ•˜์—ฌ ๋™์  ํ• ๋‹น๋œ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋™์ž‘ ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. 1: { 2: string* tmp = new string(โ€œSome Stringโ€); 3: shared_ptr ptr1(tmp); 4: { 5: shared_ptr ptr2; 6: ptr2 = ptr1; 7: } 8: } ์œ„์˜ ์ฝ”๋“œ์—์„œ 2 ๋ฒˆ ๋ผ์ธ๊นŒ์ง€ ์‹คํ–‰๋˜์—ˆ๋‹ค๊ณ  ํ•˜์ž. ์ด ๋•Œ tmp ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” string ๊ฐ์ฒด๋Š” heap ์˜์—ญ์— ๋™์  ํ• ๋‹น๋œ๋‹ค. ์ด๋•Œ heap ์˜์—ญ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 3 ๋ฒˆ ๋ผ์ธ์ด ์‹คํ–‰๋˜๋ฉด์„œ shared_ptr ์˜ ๊ฐ์ฒด์ธ ptr1 ์ด ์ƒ์„ฑ๋˜๊ณ  ptr1 ์€ tmp ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ string ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ heap ์˜์—ญ์— ์ด object ๋ฅผ ๋ช‡ ๊ฐœ์˜ shared_ptr ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์นด์šดํŒ…ํ•˜๋Š” ๋ณ€์ˆ˜ (counter)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ptr1 ์ด object ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์นด์šดํŒ… ๋ณ€์ˆ˜๋ฅผ 1 ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ด ์ƒํƒœ๋ฅผ ๋„์‹ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 5 ๋ฒˆ ๋ผ์ธ์ด ์‹คํ–‰๋˜๋ฉด์„œ shared_ptr ๊ฐ์ฒด์ธ ptr2 ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  6 ๋ฒˆ ๋ผ์ธ์ด ์‹คํ–‰๋˜๋ฉด์„œ ptr2 ์— ptr1 ์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•œ๋‹ค. ์ด ๋Œ€์ž…์—ฐ์‚ฐ์—์„œ ptr2 ๋Š” ptr1 ์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋˜ object ๋ฅผ ๊ฐ™์ด ๊ฐ€๋ฆฌํ‚ค๋ฉด์„œ ๋™์‹œ์— counter ๋„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ์ด ๋•Œ counter ์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ํŽ˜์ด์ง€ 11 / 11 7 ๋ฒˆ ๋ผ์ธ์ด ์‹คํ–‰๋˜๋ฉด์„œ ์•ˆ์ชฝ ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ๋ธ”๋ก ๋‚ด์˜ local variable ์ธ ptr2 ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ๋‹ค. ptr2 ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋ฉด์„œ counter ๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 8 ๋ฒˆ ๋ผ์ธ์ด ์‹คํ–‰๋˜๋ฉด์„œ ๋ฐ”๊นฅ์ชฝ ๋ธ”๋ก์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ๋ธ”๋ก ๋‚ด์˜ local variable ์ธ ptr1 ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ๋‹ค. ptr1 ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋ฉด์„œ ๋‹ค์‹œ counter ๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์†Œ๋œ counter ๊ฐ€ 0 ์ด ๋˜์—ˆ๋‹ค๋ฉด ptr1 ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๋Š” counter ์™€ object ๋ฅผ ๋ชจ๋‘ ๋™์  ํ•ด์ œํ•œ๋‹ค.

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] Csed 232 object-oriented programming assignmentย  4 โ€“ template & stl[SOLVED] Csed 232 object-oriented programming assignmentย  4 โ€“ template & stl
$25