문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C++ (문단 편집) ==== 메모리 관리 & 보안 ==== C++는 C언어와 마찬가지로 프로그래머가 직접 메모리를 관리하도록 함으로써 자유도가 높지만 그만큼 실수하기 쉽고 설계가 어렵다는 단점이 있다. 다른 프로그래밍 언어와 구별되는 가장 큰 차이점이다. 프로그래머들의 평균적인 기량이 뛰어나더라도 사람은 가끔이라도 반드시 실수를 하게 되므로, 프로그램 내에서 메모리 문제가 언젠가는 터질 위험이 있다 [* IT 업계에서 최고 수준의 시니어 프로그래머들을 많이 보유하고 있는 [[구글]] 조차도 [[블링크]]의 메모리 관리를 못해서 지금도 [[Chrome|누수]]와 함께 버그들이 튀어 나오는 판이고. 모질라도 [[서보(엔진)|차세대 엔진]]을 후술할 [[Rust(프로그래밍 언어)|Rust]]로 변경할 정도이다.]. Rust처럼 언어 차원에서 컴파일 시간에 메모리 소유권을 검사하고 강제하는 기능이 없기 때문에, 이 부분은 C++으로 프로그래밍할 때 언제나 염두에 둬야 하는 폭탄 같은 위험성이라고 볼 수 있다. 이 메모리 누수의 위험은 보안 문제와도 직결된다. 원천적으로 할당된 메모리, 소유권을 가진 메모리 외에는 접근을 막지 않아서 외부 메모리 임의 접근 및 후킹이 가능해진다. 최근 미국의 [[NSA]]에서도 C++을 버리고 [[Rust(프로그래밍 언어)|Rust]]를 쓰라고 권장했을 정도이며, 보안의 중요성이 나날히 높아지는 이 순간 C++의 존속까지 위협하는, 가장 큰 역린이라고 할 수 있다. [[https://www.zdnet.com/article/nsa-to-developers-think-about-switching-from-c-and-c-to-a-memory-safe-programming-language/|JDNet]] [[https://www.nsa.gov/Press-Room/News-Highlights/Article/Article/3215760/nsa-releases-guidance-on-how-to-protect-against-software-memory-safety-issues/|가이드라인]] 이에 C++ 커뮤니티가 내놓은 결론은 스마트 포인터의 강제다. 사실 모든 포인터가 {{{std::unique_ptr}}}이기만 하면 모든 메모리 누수는 해결된다. RAII[* RAII (Resource Acquisition Is Initialization). 이를 직역하면 "자원 흭득은/이 초기화다."는 뜻으로, 실행 흐름이 특정 범위를 벗어나면 그 안에서 할당한 자원을 다시 반납하도록 만드는 디자인 패턴이다. 해당 범위의 시작과 끝에 {{{new}}}나 {{{delete}}}를 사용하여 동적 배열과 같은 힙 영역 메모리의 관리를 직접 수행할 수도 있지만, 이를 하나의 객체에 묶음으로써 해당 범위에서 자동적으로 생성자와 소멸자가 호출되어 메모리를 자동으로 관리되도록 할 수 있다. 이러한 설계는 메모리 누수를 예방할 수 있다는 장점이 있다. 이에 대한 대표적인 예시는 스마트 포인터인 {{{std::unique_ptr}}}나 [[뮤텍스]]인 {{{std::lock_guard}}}가 대표적인 예이다.] 기법을 사용하면 예외, 오류도 문제없다. 배열도 {{{std::array}}} 말고는 불가능하게 만들고 메모리 임의 참조를 막아야 한다, {{{nullptr}}}을 아예 불허해야 한다는 프레젠테이션도 C++Con에서 발표된 적이 있다. [[https://youtu.be/ELeZAKCN4tY|C++ 개혁]] [[https://youtu.be/ml4t-6bg9-M|#메모리 안전성]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기