반응형

프로그래밍/C/C++ 15

[C++] 스마트포인터 weak_ptr [정보공유의 장]

C++ 스마트 포인터 weak_ptr 금일 정리해볼 내용은 스마트 포인터 중 weak_ptr 관련된 내용이다. shared_ptr 은 자신이 참조하고 있는 메모리에 대해 참조 카운터를 증감시킴으로써 객체의 수명을 관리하도록 되어 있었다. 하지만 weak_ptr 은 shared_ptr 의 참조 카운팅에 포함되지 않는다. shared_ptr 의 소유 포인터를 참조만할 뿐 참조 카운터에는 영향을 주지 않는 것이다. 내부적으로 shared_ptr 을 더 보게 되면 참조 카운터를 관리하는 변수가 두 개로 나뉘어져 있으며 strong reference count 와 weak reference count 이다. shared_ptr 끼리의 참조는 strong reference count 가 증가되며 weak_ptr 에..

[C++] 스마트포인터 unique_ptr [정보공유의 장]

C++ 스마트 포인터(Smart pointer) unique_ptr 이번 포스팅 정리는 스마트 포인터 중 unique_ptr 에 대해서 정리해 보자. unique_ptr 은 소유하는 포인터에 대해 다음과 같은 규칙을 갖는다. 1. 소유 포인터는 한 개의 객체만이 소유할 수 있다. 2. 원래 포인터의 소유권을 이동시키는 것은 가능하지만 복사나 대입은 불가능하다. 3. unique_ptr 객체가 소멸될 때 소유 포인터의 메모리도 해제된다. 우선 unique_ptr 을 생성하는 문법적인 요소를 알아보도록 하자. #include #include using namespace std; int main() { unique_ptr p1(new int(2)); unique_ptr p2 = make_unique(2); r..

[C++] 스마트포인터 shared_ptr - 정보공유의 장

이번 포스팅은 스마트 포인터 중 shared_ptr 에 대해서 정리해보겠다. shared_ptr in C++ 11 shared_ptr 은 c++ 11 이후 제공되는 스마트 포인터 중 하나로 포인터를 더 이상 사용하지 않을 경우 메모리를 자동으로 해제해준다. 보통 unmaged 코드에서는 메모리를 개발자가 직접적으로 관리하는 경우가 많은데 이럴 경우 할당된 메모리를 해제하지 않는 실수를 많이 범할 수 있다. 이런 경우를 미연에 조금 더 방지할 수 있게 해준다. 다음 코드는 shared_ptr 을 사용하는 예제를 보여주고 있다. #include #include using namespace std; int main() { shared_ptr x(new int(1)); shared_ptr y = make_sha..

C++ template with member function

이번 포스팅은 클래스의 멤버 함수(member function)를 템플릿(template)과 사용할 때 그 문법과 작성법에 대해서 알아보자. 일단 일반적인 형태는 아래 예시와 같다. #include using namespace std; template class Vec { public: void push(T a); template T func(K a); }; template void Vec::push(T a) { } template template T Vec::func(K a) { } int main() { return 0; } 위와 같이 멤버 함수에 템플릿을 사용함으로써 얻는 이득은 무엇일까 ? 다음 코드를 보자. #include template class Test { public: Test(T a) ..

C++ template 과 type 추론

C++ template 과 type 추론 이번 포스팅 정리는 template 과 type 추론 관련해서 정리해 본다. 보통 우리는 최소값 구하는 함수를 아래와 같이 구현할지 모른다. #include template T GetMin(T a, T b) { return a < b ? a : b; } int main() { int x = 1; int y = 2; GetMin(x, y); GetMin(&x, &y); return 0; } 위 코드에서 두번째 호출되는 GetMin 은 애매모호 하다. 어떤 것이 옳다고 볼 수 없기 때문이다. 값을 비교하려는 것인지 주소값을 비교하려는 것인지. 본래 의도라면 해당 변수에 있는 값을 비교해야 했으리라. 그럼 어떻게 접근해야 할까? T 의 타입이 어떤 타입인지 판단한 후 ..

C++ Perfect forwarding (std::forward 의 역할)

이전 정리글은 2022.01.07 - [프로그래밍/C/C++] - C++ Universal reference & Reference Collapsing Rules C++ Universal reference & Reference Collapsing Rules 이전 정리글은 2022.01.07 - [프로그래밍/C/C++] - C++ rvalue reference 우측값 참조 속성 C++ rvalue reference 우측값 참조 속성 이전 정리글 2022.01.06 - [프로그래밍/C/C++] - C++ rvalue reference (우측값.. nanze.tistory.com Perfect forwarding 이번 정리는 Perfect forwarding 에 대한 정리를 해보자. 직역하면 완벽한 전달 ? 쯤..

C++ Universal reference & Reference Collapsing Rules

이전 정리글은 2022.01.07 - [프로그래밍/C/C++] - C++ rvalue reference 우측값 참조 속성 C++ rvalue reference 우측값 참조 속성 이전 정리글 2022.01.06 - [프로그래밍/C/C++] - C++ rvalue reference (우측값 참조) move semantics C++ rvalue reference (우측값 참조) move semantics 이전 정리글은 2022.01.05 - [프로그래밍/C/C++] - C++.. nanze.tistory.com 이번 정리 시간은 C++ 에서의 Universal reference 와 Reference Collapsing Rules 에 대해 정리해보자. Universal reference 유니버설 레퍼런스(uni..

C++ rvalue reference 우측값 참조 속성

이전 정리글 2022.01.06 - [프로그래밍/C/C++] - C++ rvalue reference (우측값 참조) move semantics C++ rvalue reference (우측값 참조) move semantics 이전 정리글은 2022.01.05 - [프로그래밍/C/C++] - C++ Lvalue (좌측값) Rvalue (우측값) Rvalue reference (우측값 참조자) C++ Lvalue (좌측값) Rvalue (우측값) Rvalue reference (우측값 참조자) c++ lvalue.. nanze.tistory.com 우측값(rvalue)은 함수의 인자로 넘어갈 때 우측값 참조자(rvalue reference) 뿐만이 아니라 const 타입의 좌측값 참조자(lvalue refe..

반응형