C ++ 커뮤니티에서 더 일반적으로 (혼란스럽게?) 참조하는 범위 기반 메모리 관리 (SBMM) 또는 RAII를 정말 좋아 합니다. 내가 아는 한, C ++ (및 C)을 제외하고는 오늘날 SBMM / RAII를 주요 메모리 관리 메커니즘으로 만드는 다른 주류 언어는 없으며 대신 가비지 수집 (GC)을 선호합니다.
다소 혼란 스럽습니다.
- SBMM은 프로그램을보다 결정 론적으로 만듭니다 (객체가 언제 파괴되는지 정확히 알 수 있습니다).
- GC를 사용하는 언어에서는 종종 수동 리소스 관리 (예 : Java에서 파일 닫기 참조)를 수행해야합니다. 이는 GC의 목적을 부분적으로 상실하고 오류가 발생하기 쉽습니다.
- 힙 메모리는 (매우 우아하게도 imo) 범위에 바운드 될 수 있습니다 (
std::shared_ptr
C ++ 참조 ).
SBMM이 더 널리 사용되지 않는 이유는 무엇입니까? 단점은 무엇입니까?
finalize()
가비지 콜렉션 전에 오브젝트의 메소드가 호출 되는 것을 보장하지 않는 부작용 입니다. 실제로, 이것은 가비지 콜렉션이 해결해야하는 것과 동일한 클래스의 문제점을 작성합니다.