shared_ptr
-
알아두면 좋을 개념개발/C·C++ 2022. 1. 3. 21:49
IOCP를 이용한 멀티스레드 네트워크 프로그래밍에서 WSASend가 쉽지 않으며 버퍼 관리도 마찬가지입니다. 환형 버퍼를 사용하는 방법이 있으며 다른 방법은 메모리 풀링을 활용하는 것입니다. 1. 전역 버퍼 매니저를 통해 필요할 때마다 메모리를 할당받고 이 메모리는 쓰임이 다 끝나면(ref_count가 0이 되면) 자동으로 재활용됩니다. make_shared 객체를 만들 때 두 번째 인수로 deleter를 넣을 수 있는데 멤버 함수가 아닌 클래스 스태틱 함수를 넣어주면 됩니다. 반납할 때 매니저 클래스에서 관리하는 벡터 객체에 push_back 해줍니다. 2. 메모리 덩어리는 TLS에서 관리되도록 합니다. 그러면 획득한 메모리에 대해서는 멀티스레드를 신경쓰지 않아도 됩니다. 전역 객체인 버퍼 매니저에서 ..
-
스마트 포인터개발/C·C++ 2021. 9. 19. 17:33
포인터는 C++ 입문자들에게 첫 번째 장벽이면서 C++ 개발자들이 평생 신경 써야 하는 존재입니다. Java와 C#은 자동으로 메모리를 관리해주지만 C++은 개발자가 관리해야 하죠. 하지만 Raw pointer을 전부 일일이 관리할 수 없기 때문에 스마트 포인터를 잘 활용해야 합니다. 스마트 포인터는 지역 변수의 생명 주기를 이용하는 클래스입니다. 소멸자를 통해서 메모리를 해제시켜주기 때문에 직접 delete를 이용하는 것보단 부담이 덜합니다. 여기서 중요한 것은 부담이 덜하다는 것이지 완전히 사라지는 것이 아니라는 점입니다. unique_ptr은 이름에서 알 수 있듯 포인터가 유일하게 하나만 존재할 수 있도록 복사를 막아놨습니다. shared_ptr은 신경 써서 사용해야 합니다. 내부적으로 참조 카운트..