24b0d121e09c28a8699fe8b115ef046c60f42f4699

RAII 자체는 C++ 탄생 부터 함께했음


Fire and Forgot 같은거 '패턴'으로 쓰였음


근데 패턴은 언어적 차원의 지원이 아님


따라서 이때문에 C++ 98에서 Auto_ptr이 나왔지만 검증 레이어인 이동시맨틱이 부재로 인해서 실제로 Auto_ptr은 쓰이지 않았고, 실제로 유저가 구현해서 써야했음


그 마저도 절대다수는 RAII 조차 시도도 안한 사실이고( 23년도 기준 약 90%의 C++ 프로젝트가 RAII를 지키지 않는다는게 통계였음)


결국 언어적 차원에서 RAII를 직접 지원하기위해서 시도된게 모던 C++이고, 여기서 도입된 래퍼들이 C++11이고 이걸 일반적으로 모던 문법이라고 하는거고


그걸 지키지 않으면 '레거시'라고 코어 가이드라인에서 말하는거


자꾸


'RAII는 이전부터 있었는데 뭔 소리야'


이러는데


'RAII는 초창기부터 존재했지만, 대부분 안 지켜서 지키라고 C++11부터 포인터 래퍼해서 만들어줬고, 그게 모던 문법이라고 한다'


라는거임


자꾸 '패턴' 과 '언어적 지원' 이 2개를 혼동하는거 같은데


언어적 규약과 프로그래머가 쨔아할 베스트 프렉티스 사이에의 간극을 이해 못하는듯


std::string 같은거 가져와서 이건 뭔데?


이러는데


std::string도 표준화 이전 SGI STL에도 존재했지만, 


11부터 무브 시맨틱스가 추가되면서 std::string s=std::move(other); 같은게 가능해짐


실제로 이러한 검증 레이어가 있고 없고가 굉장히 큰데 이 차이를 자꾸 무시하노


무브 시맨틱스가 언제 생겼는지 챙겨봐라


그냥 뭐 냅둘라고 했는데 지가 저격해서 싸워놓고 또 지랄염병이네