์ฃผ์ ์ฌํญ โ ํด๋์ค ์ ์ธ ๋ฐ ์ ์๋ฅผ 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 ๋ฅผ ๋ชจ๋ ๋์ ํด์ ํ๋ค.
Assignment, CSED, object-oriented, Programming, solved, template
[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
Only logged in customers who have purchased this product may leave a review.

![[SOLVED] Csed 232 object-oriented programming assignmentย 4 โ template & stl](https://assignmentchef.com/wp-content/uploads/2022/08/downloadzip.jpg)

![[SOLVED] MongoDB CRUD Faculty](https://assignmentchef.com/wp-content/uploads/2022/08/downloadzip-1200x1200.jpg)
Reviews
There are no reviews yet.