๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 27 : ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ ๋์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฒ๋ค์ ์์ ๋๋ผ ํต์ฌ : 1. ๋ณดํธ ์ฐธ์กฐ์ ์ค๋ณต์ ์ฌ์ ์กฐํฉ์ ๋ํ ๋์์ผ๋ก๋ ๊ตฌ๋ณ๋๋ ํจ์ ์ด๋ฆ ์ฌ์ฉ, ๋งค๊ฐ๋ณ์๋ฅผ const ์ ๋ํ ์ผ๊ฐ ์ฐธ์กฐ๋ก ์ ๋ฌ, ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌ, ๊ผฌ๋ฆฌํ ๋ฐฐ๋ถ ์ฌ์ฉ ๋ฑ์ด ์๋ค. 2. std::enable_if ๋ฅผ ์ด์ฉํด์ ํ ํ๋ฆฟ์ ์ธ์คํด์คํ๋ฅผ ์ ํํจ์ผ๋ก์จ ๋ณดํธ ์ฐธ์กฐ์ ์ค๋ณต์ ์ฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. std::enable_if ๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ณดํธ ์ฐธ์กฐ ์ค๋ณต์ ์ฌ๋ฅผ ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ ์ดํ๋ ์ฉ๋๋ก ์ฐ์ธ๋ค. 3. ๋ณดํธ ์ฐธ์กฐ ๋งค๊ฐ๋ณ์..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 26 : ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ๋ฅผ ํผํ๋ผ ํต์ฌ : 1. ๋ณดํธ ์ฐธ์กฐ์ ๋ํ ์ค๋ณต์ ์ฌ๋ ๊ฑฐ์ ํญ์ ๋ณดํธ ์ฐธ์กฐ ์ค๋ณต์ ์ฌ ๋ฒ์ ์ด ์์๋ณด๋ค ์์ฃผ ํธ์ถ๋๋ ์ํฉ์ผ๋ก ์ด์ด์ง๋ค. 2. ์๋ฒฝ ์ ๋ฌ ์์ฑ์๋ค์ ํนํ๋ ๋ฌธ์ ๊ฐ ๋ง๋ค. ๊ทธ๋ฐ ์์ฑ์๋ ๋์ฒด๋ก ๋นconst ์ผ๊ฐ์ ๋ํ ๋ณต์ฌ ์์ฑ์๋ณด๋ค ๋ ๋์ ๋ถํฉ์ด๋ฉฐ, ๊ธฐ๋ฐ ํด๋์ค ๋ณต์ฌ ๋ฐ ์ด๋ ์์ฑ์๋ค์ ๋ํ ํ์ ํด๋์ค๋ค์ ํธ์ถ๋ค์ ๊ฐ๋ก์ฑ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. std::multiset names; void logAndAdd(const std::string& name) ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 25 : ์ค๋ฅธ๊ฐ ์ฐธ์กฐ์๋ std::move ๋ฅผ, ๋ณดํธ ์ฐธ์กฐ์๋ std::forward ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. ์ค๋ฅธ๊ฐ ์ฐธ์กฐ๋ ๋ณดํธ ์ฐธ์กฐ๊ฐ ๋ง์ง๋ง์ผ๋ก ์ฐ์ด๋ ์ง์ ์์, ์ค๋ฅธ๊ฐ ์ฐธ์กฐ์๋ std::move ๋ฅผ, ๋ณดํธ ์ฐธ์กฐ์๋ std::forward ๋ฅผ ์ ์ฉํ๋ผ. 2. ๊ฒฐ๊ณผ๋ฅผ ๊ฐ ์ ๋ฌ ๋ฐฉ์์ผ๋ก ๋๋ ค์ฃผ๋ ํจ์๊ฐ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ๋ ๋ณดํธ ์ฐธ์กฐ๋ฅผ ๋๋ ค์ค ๋์๋ ๊ฐ๊ฐ std::move ๋ std::forward ๋ฅผ ์ ์ฉํ๋ผ. 3. ๋ฐํ๊ฐ ์ต์ ํ์ ๋์์ด ๋ ์ ์๋ ์ง์ญ ๊ฐ์ฒด์๋ ์ ๋๋ก std::move ๋ std::forward ๋ฅผ ์ ์ฉํ์ง ๋ง์์ผ ํ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 24 : ๋ณดํธ ์ฐธ์กฐ์ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ๋ฅผ ๊ตฌ๋ณํ๋ผ ํต์ฌ : 1. ํจ์ ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์์ ํ์์ด T&& ํํ์ด๊ณ T ๊ฐ ์ฐ์ญ๋๋ค๋ฉด, ๋๋ ๊ฐ์ฒด๋ฅผ auto&& ๋ก ์ ์ธํ๋ค๋ฉด, ๊ทธ ๋งค๊ฐ๋ณ์๋ ๊ฐ์ฒด๋ ๋ณดํธ ์ฐธ์กฐ์ด๋ค. 2. ํ์ ์ ์ธ์ ํํ๊ฐ ์ ํํ ํ์&& ๊ฐ ์๋๋ฉด, ๋๋ ํ์ ์ฐ์ญ์ด ์ผ์ด๋์ง ์์ผ๋ฉด, ํ์&& ๋ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ๋ฅผ ๋ปํ๋ค. 3. ์ค๋ฅธ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๋ ๋ณดํธ ์ฐธ์กฐ๋ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ์ ํด๋นํ๋ค. ์ผ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๋ ๋ณดํธ ์ฐธ์กฐ๋ ์ผ๊ฐ ์ฐธ์กฐ์ ํด๋นํ๋ค. "T&&" ๋ ์ค๋ฅธ๊ฐ ์ฐธ์กฐ ๋๋ ์ผ๊ฐ ์ฐธ์กฐ ์ค ํ๋๋ผ๋ ๋ป์ด๋ค. ์ด๋ฌํ ์ฐธ์กฐ๋ฅผ ๋ณดํธ ์ฐธ์กฐ(u..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 23 : std::move ์ std::forward ๋ฅผ ์์งํ๋ผ ํต์ฌ : 1. std::move ๋ ์ค๋ฅธ๊ฐ์ผ๋ก์ ๋ฌด์กฐ๊ฑด ์บ์คํ ์ ์ํํ๋ค. std::move ์์ฒด๋ ์๋ฌด๊ฒ๋ ์ด๋ํ์ง ์๋๋ค. 2. std::forward ๋ ์ฃผ์ด์ง ์ธ์๊ฐ ์ค๋ฅธ๊ฐ์ ๋ฌถ์ธ ๊ฒฝ์ฐ์๋ง ๊ทธ๊ฒ์ ์ค๋ฅธ๊ฐ์ผ๋ก ์บ์คํ ํ๋ค. 3. std::move ์ std::forward ๋ ๋ค, ์คํ ์์ ์์๋ ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค. std::move ์ std::forward ๋ ์คํ ๊ฐ๋ฅ ์ฝ๋๋ฅผ ํ ๋ฐ์ดํธ๋ ์ฐ์ถํ์ง ์๋๋ค. ๊ทธ๋ค์ ๊ทธ๋ฅ ์บ์คํ ์ ์ํํ๋ ํจ์(๊ตฌ์ฒด์ ์ผ๋ก๋ ํจ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 22 : Pimpl ๊ด์ฉ๊ตฌ๋ฅผ ์ฌ์ฉํ ๋์๋ ํน์ ๋ฉค๋ฒ ํจ์๋ค์ ๊ตฌํ ํ์ผ์์ ์ ์ํ๋ผ ํต์ฌ : 1. Pimpl ๊ด์ฉ๊ตฌ๋ ํด๋์ค ๊ตฌํ๊ณผ ํด๋์ค ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์ปดํ์ผ ์์กด์ฑ์ ์ค์์ผ๋ก์จ ๋น๋ ์๊ฐ์ ๊ฐ์ํ๋ค. 2. std::unique_ptr ํ์์ pImpl ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๋์๋ ํน์ ๋ฉค๋ฒ ํจ์๋ค์ ํด๋์ค ํค๋์ ์ ์ธํ๊ณ ๊ตฌํ ํ์ผ์์ ๊ตฌํํด์ผ ํ๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์์ฑํ๋ ํจ์ ๊ตฌํ๋ค์ด ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๊ฒ ํด์ผ ํ๋ค. 3. ์์ ์กฐ์ธ์ std::unique_ptr ์ ์ ์ฉ๋ ๋ฟ, std::shared_ptr ์..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 21 : new ๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค std::make_unique ์ std::make_shared ๋ฅผ ์ ํธํ๋ผ ํต์ฌ : 1. new ์ ์ง์ ์ฌ์ฉ์ ๋นํด, make ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์์ค ์ฝ๋ ์ค๋ณต์ ์ฌ์ง๊ฐ ์์ด์ง๊ณ , ์์ธ ์์ ์ฑ์ด ํฅ์๋๊ณ , std::make_shared ์ std::allocate_shared ์ ๊ฒฝ์ฐ ๋ ์๊ณ ๋น ๋ฅธ ์ฝ๋๊ฐ ์ฐ์ถ๋๋ค. 2. make ํจ์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ๋๋ ๋ถ์ ํฉํ ๊ฒฝ์ฐ๋ก๋ ์ปค์คํ ์ญ์ ์๋ฅผ ์ง์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ค๊ดํธ ์ด๊ธฐ์น๋ฅผ ์ ๋ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. 3. std::shared_ptr ์ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 20 : std::shared_ptr ์ฒ๋ผ ์๋ํ๋ ๋์์ ์์ ์๋ ์๋ ํฌ์ธํฐ๊ฐ ํ์ํ๋ฉด std::weak_ptr ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. std::shared_ptr ์ฒ๋ผ ์๋ํ๋ ๋์์ ์์ ์๋ ์๋ ํฌ์ธํฐ๊ฐ ํ์ํ๋ฉด std::weak_ptr ๋ฅผ ์ฌ์ฉํ๋ผ 2. std::weak_ptr ์ ์ ์ฌ์ ์ธ ์ฉ๋๋ก๋ ์บ์ฑ, ๊ด์ฐฐ์ ๋ชฉ๋ก, ๊ทธ๋ฆฌ๊ณ std::shared_ptr ์ํ ๊ณ ๋ฆฌ ๋ฐฉ์ง๊ฐ ์๋ค. std::weak_ptr ๋ std::shared_ptr ์ฒ๋ผ ๋์ํ๋, ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์์๋ ์ํฅ์ ๋ผ์น์ง ์๋๋ค. ๋์์ ์์ std::..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 19 : ์์ ๊ถ ๊ณต์ ์์์ ๊ด๋ฆฌ์๋ std::shared_ptr ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. std::shared_ptr ๋ ์์์ ๊ณต์ ์์์ ์๋ช ์ ํธ๋ฆฌํ๊ฒ(์ฐ๋ ๊ธฐ ์๊ฑฐ์ ๋งก๊ธธ ๋๋งํผ์ด๋) ๊ด๋ฆฌํ ์ ์๋ ์๋จ์ ์ ๊ณตํ๋ค. 2. ๋์ฒด๋ก std::shared_ptr ๊ฐ์ฒด๋ ๊ทธ ํฌ๊ธฐ๊ฐ std::shared_ptr ๊ฐ์ฒด์ ๋ ๋ฐฐ์ด๋ฉฐ, ์ ์ด ๋ธ๋ก์ ๊ด๋ จ๋ ์ถ๊ฐ ๋ถ๋ด์ ์ ๋ฐํ๋ฉฐ, ์์์ ์ฐธ์กฐ ํ์ ์กฐ์์ ์๊ตฌํ๋ค. 3. ์์์ ๊ธฐ๋ณธ์ ์ผ๋ก delete ๋ฅผ ํตํด ํ๊ดด๋๋, ์ปค์คํ ์ญ์ ์๋ ์ง์๋๋ค. ์ญ์ ์์ ํ์์ std::shared_ptr ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 18 : ์์ ๊ถ ๋ ์ ์์์ ๊ด๋ฆฌ์๋ std::unique_ptr ๋ฅผ ์ฌ์ฉํ๋ผ ํต์ฌ : 1. std::unique_ptr ๋ ๋ ์ ์์ ๊ถ ์๋ฏธ๋ก ์ ๊ฐ์ง ์์์ ๊ด๋ฆฌ๋ฅผ ์ํ, ์๊ณ ๋น ๋ฅธ ์ด๋ ์ ์ฉ ๋๋ํ ํฌ์ธํฐ์ด๋ค. 2. ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ํ๊ดด๋ delete ๋ฅผ ํตํด ์ผ์ด๋๋, ์ปค์คํ ์ญ์ ์๋ฅผ ์ง์ ํ ์ ์๋ค. ์ํ ์๋ ์ญ์ ์๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด std::unique_ptr ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค. 3. std::unique_ptr ๋ฅผ std::shared_ptr ๋ก ์์ฝ๊ฒ ๋ณํํ ์ ์๋ค. C++ ์์ ์ ํฌ์ธํฐ(raw pointe..