본문 바로가기
반응형

정보정리33

[C/C++] 자원 관리(feat. 스마트 포인터) 자원 관리 자원 관리의 중요성 - 메모리를 할당만 하고 해제를 하지 않는다면, 결국 메모리 부족으로 프로그램이 crash 될 수 있다. - C++ 이후에 나온 많은 언어들은 대부분 가비지 컬렉터(Garbage Collector - GC)라 불리는 기능이 기본적으로 내장되어 있다. => 가비지 컬렉터는 프로그램 상에서 더 이상 쓰이지 않는 자원을 자동으로 해제해주는 역할을 한다. ==> 프로그래머들이 코드를 작성할 때, 자원을 해제하는 일에 대해 크게 신경 쓸 필요가 없다. - C++은 프로그래머가 한 번 획득한 자원은, 직접 해주지 않는 이상 프로그램 종료 전까지 영원히 남아있게 된다. => 프로그램 종료시에는 운영체제가 알아서 해제해준다. - delete가 제대로 되지 않아서 메모리 누수가 발생하는 경.. 2023. 2. 10.
[C/C++] Lvalue, Rvalue Lvalue, Rvalue 복사 생략(Copy Elision) - 컴파일러 자체에서 복사를 생략하는 작업을 복사 생략이라고 한다. ex) A a(A(2)); 와 같은 경우 A(2) 에 대한 일반 생성자를 호출한 후 생성된 임시 객체로 a가 복사 생성되는 게 정석이지만, 컴파일러가 이러한 과정을 생략해서 a 자체를 A(2)로 만들어진 객체로 해버리는 것이다. - 함수 내부에서 생성된 객체를 그대로 리턴할 때 수행할 수 있다. => C++ 표준을 봤을 때, 복사 생략을 해야한다 가 아니라, 복사 생략을 할 수도 있다 라고 표기되어 있다. ==> 즉, 경우에 따라 복사 생략을 해야하지만 복사 생략이 되지 않을 수도 있다. 좌측값(lvalue)과 우측값(rvalue) - 모든 C++ 표현식(expression).. 2023. 2. 10.
[C/C++] 문자열 및 예외처리 문자열 짧은 문자열 최적화(SSO) - 짧은 길이 문자열의 경우 따로 문자 데이터를 위한 메모리를 할당하는 대신에 그냥 객체에 저장해버린다. => 이를 짧은 문자열 최적화(Short String Optimization)이라 부른다. 리터럴 연산자 - auto str = "test"s 와 같이 "" 뒤에 s를 붙여주면 auto가 string으로 추론된다. - 문자열 리터럴만 가능한 것이 아니라 정수나 부동 소수점 리터럴들 역시 사용 가능하다. - wchar_t 문자열을 만들고 싶다면 앞에 L을 붙여주면 된다. - R"()" 안에 오는 문자들은 모두 문자 그대로 char 배열 안에 넣을 수 있다. ex) std::string str = R"(이런 식으로 어떤 내용이든 넣을 수 있다 \n\n)"; => 기존에.. 2023. 2. 3.
[C/C++] 표준 템플릿 라이브러리(STL) - (3) C++ STL 정렬 - 3가지 종류의 함수를 지원한다. sort : 일반적인 정렬 함수 stable_srot : 정렬을 하되, 원소들 간의 순서를 보존한다. ex) 벡터에 [a, b] 순으로 원소가 들어있고 a와 b의 크기가 같다고 했을 때, sort를 하면 [b, a] 순으로 변경될 가능성이 있지만 stable_sort를 사용하면 정렬 시에도 [a, b] 순으로 나오게 된다. 단, 이러한 특성 때문에 sort보단 느리다. partial_sort : 배열의 일부분만 정렬한다. - sort에 들어가는 반복자의 경우 반드시 임의접근 반복자(RandomAccessIterator) 타입을 만족해야 하기 때문에, 벡터와 데크만 사용이 가능하고 나머지 컨테이너는 sort 함수를 사용할 수 없다.(리스트의 경우 반복.. 2023. 2. 3.
반응형