Drop
ํธ๋ ์
Drop
ํธ๋ ์์ ๊ตฌํํ๋ฉด, ๊ทธ ๊ฐ์ด ์ค์ฝํ ๋ฐ์ผ๋ก ๋๊ฐ ๋ ์คํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค:
struct Droppable { name: &'static str, } impl Drop for Droppable { fn drop(&mut self) { println!("{} ์ญ์ ์ค", self.name); } } fn main() { let a = Droppable { name: "a" }; { let b = Droppable { name: "b" }; { let c = Droppable { name: "c" }; let d = Droppable { name: "d" }; println!("B ๋ธ๋ก์์ ๋๊ฐ๊ธฐ"); } println!("A ๋ธ๋ก์์ ๋๊ฐ๊ธฐ"); } drop(a); println!("main์์ ๋๊ฐ๊ธฐ"); }
This slide should take about 8 minutes.
std::mem::drop
์std::ops::Drop::drop
๊ณผ ๊ฐ์ง ์์ต๋๋ค.- ๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
- ๊ฐ์ด ์ญ์ ๋ ๋
std::ops::Drop
์ ๊ตฌํํ๋ฉดDrop::drop
๊ตฌํ์ด ํธ์ถ๋ฉ๋๋ค. - ๊ทธ๋ฌ๋ฉด
Drop
๊ตฌํ ์ฌ๋ถ์ ๊ด๊ณ์์ด ํด๋น ํ๋๋ ๋ชจ๋ ์ญ์ ๋ฉ๋๋ค. std::mem::drop
์ ๊ฐ์ ์ฌ์ฉํ๋ ๋น ํจ์์ ๋๋ค. ์ค์ํ ์ ์ ๊ฐ์ ์์ ๊ถ์ ๊ฐ์ง๋ฏ๋ก ๋ฒ์ ๋์์ ์ญ์ ๋๋ค๋ ์ ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋๋ณด๋ค ๋นจ๋ฆฌ ๊ฐ์ ๋ช ์์ ์ผ๋ก ์ญ์ ํ ์ ์๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋๋ค.- ์ด๋
drop
์์ ์ ๊ธ ํด์ , ํ์ผ ๋ซ๊ธฐ ๋ฑ์ ์์ ์ ์คํํ๋ ๊ฐ์ฒด์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ด๋
๋ ผ์์ :
Drop::drop
์ ์self
๋ฅผ ์ธ์๋ก ๋ฐ์ง ์์ต๋๊น?- ์งง์ ๋๋ต: ๋ง์ฝ ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด
std::mem::drop
์ด ๋ธ๋ก์ ๋์์ ํธ์ถ๋๊ณ , ๋ค์Drop::drop
์ ํธ์ถํ๊ฒ ๋์ด, ์คํ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํฉ๋๋ค!
- ์งง์ ๋๋ต: ๋ง์ฝ ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด
drop(a)
๋ฅผa.drop()
๋ก ๋ณ๊ฒฝํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.