포인터에 대한 깊이 있는 설명은 얇은 책 한권은 나올만한 분량일 것이다. 여기서는 간략히 Modern C++에서 추가된 개념에 대해서만 정리하자. 전통적인 포인터 사용법외에 두가지 중요한 포인터 관리 크래스가 추가되었다.
포인터 연산에서 뺄셈은 가능하다. 그 뺄셈은 두 포인터 주소의 차이를 포인터의 크기로 나눈 것인테 ptrdiff_t 형이 추가 되었다. 결국 이것은 내부적으로는 int64나 int형이 재정의된 것이다. 어떤 특별한 장점이 있다기 보다는 포인터의 차이값이란 의미를 강조하기 위한 것으로 보인다.
uniq_ptr 클래스가 추가되었다. 포인터를 유일하게 관리하는 클래스이며 scope를 벗어나면 자동으로 메모리에서 해제가 된다.
라인 15, 16 : 명시적으로 선언하여 메모리를 할당하기 보다는 make_unique를 통해 하는 것을 권장하고 있다. 사실 라인 15에서 선언하는 방식이 문제가 있는 것은 아니지만 함수의 인자로 선언하면서 동시에 할당할 경우 문제를 일을킬 수 있다고 한다. 가급적 라인 16의 방식으로 사용하도록 하자.
라인 20: get 함수를 이용하여 직접적으로 포인터 주소를 가져올 수 있다.
라인 24, 25: release 함수는 포인터 주소를 리턴하면서 객체의 내부 값을 초기화 하는 것이다. 사용자가 직접 메모리를 해제해 주어야 한다. 실질적으로 어떤 경우 이런 함수가 필요한지는 잘 모르겠다. 별로 쓸일이 없을듯. 내부의 메모리를 실질적으로 해제까지 하는 것으로는 reset 함수를 사용하면 된다.
shared_ptr는 포인터를 다른 쉐어드 포인터에 넘겨줄 수 있다. 내부적으로 reference counter를 가지고 있어 모든 공유된 포인터 객체가 범위를 벗어나면 메모리를 해제하게 된다.
라인 36: reference counter를 확인할 수 있다.
'Language & Toolkit > C++' 카테고리의 다른 글
STL container - std::vector (0) | 2019.03.09 |
---|---|
Beginning C++17 - Chapter 7: Working with Strings (0) | 2019.02.06 |
Beginning C++17 - Chapter 5: Array and loops (0) | 2019.01.27 |
Beginning C++17 - Chapter 4: Making Decisions (0) | 2019.01.27 |
Beginning C++17 - Chapter 3: Working with fundamental data types (0) | 2019.01.27 |