[Rust] unsafe: 포인터

unsafeλŠ” λŸ¬μŠ€νŠΈμ—μ„œ 일반적으둜 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”, ν”Œλž«νΌ 의쑴적인 μ½”λ“œλ‚˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•˜λŠ” μ½”λ“œ 등을 μž‘μ„±ν• λ•Œ μ‚¬μš©ν•œλ‹€.

자주 μ“Έλ§Œν•œκ±΄ μ•„λ‹ˆμ§€λ§Œ, μ’…μ’… ν•„μš”ν•œ λ•Œκ°€ μžˆλ‹€.

λ¬Έμ„œμ—μ„œ μ •μ˜ν•˜λŠ” unsafe의 κΈ°λŠ₯에 λ”°λ₯΄λ©΄, unsafeλŠ” μ•„λž˜μ˜ 행동듀을 ν•  수 μžˆλ‹€.

1.생(raw:날것) 포인터λ₯Ό μ—­μ°Έμ‘°ν•˜λŠ” 것.

2.unsafe ν•¨μˆ˜λ‚˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것

3.mutable static λ³€μˆ˜μ— μ ‘κ·Όν•˜κ±°λ‚˜ 값을 μˆ˜μ •ν•˜λŠ” 것

4.unsafe νŠΈλ ˆμž‡μ„ κ΅¬ν˜„ν•˜λŠ” 것


1번인 포인터뢀터 보자.
λŸ¬μŠ€νŠΈμ—μ„  기본적으둜 &둜 참쑰값을 μ–»μ–΄μ˜€κ³ , &Tλ‚˜ &mut T둜 μ°Έμ‘°νƒ€μž…μ„ ν‘œμ‹œν•œλ‹€.

ν•˜μ§€λ§Œ 러슀트의 μ—„κ²©ν•œ κ·œμΉ™λ“€μ„ μ μš©ν•˜μ§€ μ•ŠλŠ” 생포인터 λ˜ν•œ μ‚¬μš©ν•  수 μžˆλŠ”λ°, 이것듀은 *const Tλ‚˜ *mut T의 ν˜•νƒœλ‘œ νƒ€μž…μ„ ν‘œν˜„ν•œλ‹€.
참쑰값을 μ–»μ–΄μ˜€λŠ”κ±΄ 이것도 &λ₯Ό μ“΄λ‹€.

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ₯Ό 보자 image

image ν¬μΈν„°κ°’μ˜ 생성은 κ·Έλƒ₯도 ν•  수 μžˆμ§€λ§Œ, *둜 μ—­μ°Έμ‘°ν•˜λŠ”κ±΄ unsafe λΈ”λŸ­μ—μ„œλ§Œ ν•  수 μžˆλ‹€. image

image 잘 λˆλ‹€.

ν•˜μ§€λ§Œ unsafe λΈ”λŸ­μ„ λΉΌλ©΄ μ—λŸ¬κ°€ λ‚œλ‹€. image

image

image

const ν¬μΈν„°λŠ” μ—¬μ „νžˆ μƒμˆ˜μ„±μ„ μœ μ§€ν•œλ‹€. image

image

image

그런데 μƒμˆ˜ 포인터λ₯Ό λ³€μˆ˜ ν¬μΈν„°λ‘œ λ³€ν™˜ν•˜λŠ” 짓은 κ°€λŠ₯ν•˜λ‹€. image

image

image

λ³€μˆ˜ ν¬μΈν„°μ—λŠ” μ†Œμœ κΆŒ κ·œμΉ™λ„ μ—†λ‹€. ν•œλ²ˆμ— μ—¬λŸ¬κ°œμ˜ κ°€λ³€ 포인터λ₯Ό 생성할 μˆ˜λ„ μžˆλ‹€. image

image

image 잘 λœλ‹€.


κ·Έλ ‡λ‹€.



μ°Έμ‘°
https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html