운영체제 시간 때 데드락 발생 필요 조건 4가지가 있는데 메모리 오류도 발생 필요 조건이 있음(있다고 느껴짐)
C++은 이에 대해서 메모리 오류가 반드시 발생하는 것은 아니니, 필요 조건이 전부 발생해도 이를 컴파일러에서 건들지 않고 프로그래머가 너가 결정해라고 내비둠.
그러면 프로그래머는 자신의 경험과 로직에 따라 메모리 오류가 발생하지 않는다고 생각하면 그 부분을 내비두거나 (발생한다고 생각하면) 수정함.
Rust는 이에 대해서 메모리 오류가 발생할 가능성이 있으니 일단 컴파일러 오류로 이를 막음.하지만 컴파일러가 생각했을 때 프로그래머가 신경쓰면 괜찮은 부분이라면 unsafe구문을 사용하면 허용하게 만듦. 그럼 프로그래머는 컴파일러가 오류를 뿜은 위치가 위험한지 안위험한지 파악하고 unsafe구문으로 넘어가거나, 아니면 코드를 수정함.
아니 C++은 요즘 그런식으로 하지 않아. 스마트포인터를 비롯해서 각종 장치들로 컴파일 에러를 일으키게 만들지 - return 0;
하지만 그건 여전히 선택사항이지 강제사항은 아님
굉장히 추천되고 그렇게 하라고 강요하지만 강제는 아님
사실상 강제죠 안 쓰면 동료들한테 욕먹음 - return 0;