C++11에 들어서서 rvalue (Right-value)에 대한 기능(?)들이 생기기 시작 했었습니다.그 중에서 이동 생성자(Move Constructors)와 이동 할당 연산자(Move Assignment Operators)에 대한 이야기 입니다.기본 레퍼런스 내용 How to: Define move constructors and move assignment operators (C++)Learn more about: Move Constructors and Move Assignment Operators (C++)learn.microsoft.com지금부터 나올 이야기는 위의 MS Learn(구 MSDN)에 나온 이야기와 기타 공부를 했었던 내용의 짬뽕입니다.rvalue (Right-value)와 lval..
최근에 스크립트형 언어 컴파일러를 만들고 있습니다. (실시간 스크립트 변형 후 동작을 위한) 이 과정 중에서 어휘 분석기(Lexical Analyzer)를 구현하는 과정에서 이전에 한 번 써보았던 unordered_map를 사용하게되어 unordered_map을 다시 공부한 내용을 써보려고 합니다. 들어가기에 앞서 제가 공부한 내용들은 전부 아래의 링크들에서 학습 및 참고하였습니다. A Proposal to Add Hash Tables to the Standard Library X(i, j, n, hf, eq) X a(i, j, n, hf, eq) X Constructs an empty container with at least n buckets, using hf as the hash function a..
C++ 에서는 스마트 포인터라는 것을 사용하여 포인터를 더욱 안전하고 효율적으로 사용할 수 있습니다. 스마트 포인터에는 다음과 같이 3가지가 존재합니다. unique_ptr shared_ptr weak_ptr 기존의 포인터의 경우에는 new와 delete가 한 쌍으로 사용되었으나 프로그래머의 실수로 delete를 하지 않게 될 경우에는 메모리 누수로 이어졌습니다. 오늘은 이 스마트 포인터 중 weak_ptr을 소개 합니다. 참조 개수를 늘리지 않는 shared_ptr (weak_ptr) (C++11) shared_ptr는 참조할 때마다 참조 개수가 늘어나지만 weak_ptr은 참조의 개수를 늘이지 않습니다. weak_ptr은 소유(Own)하는 참조가 아닌 임시적 참조(Temporary Ownership)..
C++ 에서는 스마트 포인터라는 것을 사용하여 포인터를 더욱 안전하고 효율적으로 사용할 수 있습니다. 스마트 포인터에는 다음과 같이 3가지가 존재합니다. unique_ptr shared_ptr weak_ptr 기존의 포인터의 경우에는 new와 delete가 한 쌍으로 사용되었으나 프로그래머의 실수로 delete를 하지 않게 될 경우에는 메모리 누수로 이어졌습니다. 오늘은 이 스마트 포인터 중 shared_ptr을 소개 합니다. 공용 소유가 가능한 포인터 (shared_ptr) (C++11) 단 하나의 소유권을 가지는 unique_ptr과는 달리 shared_ptr은 공용 소유가 가능한 포인터로 한 객체를 여러개의 shared_ptr로 공용 소유가 가능합니다. template class shared_ptr..
C++ 에서는 스마트 포인터라는 것을 사용하여 포인터를 더욱 안전하고 효율적으로 사용할 수 있습니다. 스마트 포인터에는 다음과 같이 3가지가 존재합니다. unique_ptr shared_ptr weak_ptr 기존의 포인터의 경우에는 new와 delete가 한 쌍으로 사용되었으나 프로그래머의 실수로 delete를 하지 않게 될 경우에는 메모리 누수로 이어졌습니다. 하지만 스마트 포인터는 기본적으로 참조가 없어질 때 메모리를 비워줍니다. (RAII - Resource Acquisition Is Initialization) 오늘은 이 스마트 포인터 중 unique_ptr을 먼저 소개합니다. 단 하나의 포인터 (unique_ptr) (C++11) unique_ptr은 단 하나의 소유권을 가지며 해당 소유권을 ..
C++ 표준 라이브러리에 있는 고정된 크기의 배열을 캡슐화 한 컨테이너(container that encapsulates fixed size arrays.) 입니다. C++을 사용하다 보면 일반 배열을 사용하기 보다는 std::array를 더 많이 사용하기도 합니다. (도입된 표준은 C++11 에서 도입되었습니다. 그렇기 때문에 C++11 이하의 환경에서 개발을 할때는 사용하지 못합니다.) 자주 사용되는 몇 가지를 보도록 합시다. 생성자 (Initializer) 기본적으로 Aggregate 한 방식으로 사용됩니다. #include // 헤더파일 필요 // 사용법 std::array 이름 = 초기화값; // Aggregate 형식 지원 std::array arrInt1 = {1,2,3}; // 크기는 정해..