본문 바로가기

Language26

std::weak_ptr를 통한 shared_ptr 생성은 멀티스레드 환경에서 안전한가? 목표멀티스레드 환경에서 weak_ptr의 lock()을 통한 shared_ptr 생성의 결과가유효한 shared_ptr, nullptr 이외에 half-alive 상태일 가능성에 대해 포스팅한다. 1. weak_ptr에 관하여1.1 정의 및 사용목적std::weak_ptr은 소유하지 않는 shared_ptr 이다.shared_ptr로 관리되는 객체에 대해 참조만 할 뿐, use_count를 증가시키지 않는다.이를 통해서 궁극적으로 weak_ptr은 shared_ptr의 순환참조를 예방하는 역할을 수행할 수 있다. 본격적인 예시코드를 읽기전에 shared_ptr로 관리되는 객체는 오직 use_count가 0으로 되었을 때 소멸될 수 있음을 상기한다. struct B;struct A { std::sha.. 2026. 1. 24.
Variant 초기화의 중요성 bad_variant_access Std::Variant는 C++ 17에서 지원하는 공용체이다. 공용체란 한 인스턴스에 다양한 타입의 값을 담을 수 있는 구조체를 의미한다. 공용체라면 가장 쉽게 접할 수 있는게 명시적인 Union 일텐데, 현재 Std::Variant는 Value와 함께 저장된 값의 유형을 식별하는 판별자를 관리하기 때문에 공용체를 구현하는데 보다 안정적인 방법으로 선호되고 있다. (기존의 Union의 경우 타입을 판별하지 않기때문에 논리 오류로 이어질 수 있다는 단점이 존재한다.) * Variant의 이용방법은 다음과 같다. https://en.cppreference.com/w/cpp/utility/variant std::variant - cppreference.com template class variant; (sin.. 2022. 6. 3.
상수 멤버함수의 설계 방법 멤버 함수에 붙는 const 키워드의 역할은 해당 멤버 함수가 상수 객체 대해 호출될 함수라는 사실을 의미한다. 이러한 함수는 먼저 클래스의 인터페이스를 이해하기 좋게하기 위해 사용되며, 두 번째로 이 키워드를 통해 상수 객체를 사용할 수 있게 하기위함이다. cosnt 키워드가 있고 없고의 차이만 있는 멤버 함수들은 오버로딩이 가능하다. 오버로드를해서 각 버전마다 반환 타입을 다르게 가져간다면 상수 객체와 비상수 객체의 쓰임새를 다르게 가져갈 수 있다. class TextBlock { public: const char& operator[](std::size_t position) const { return text[position]; } char& operator (std::size_t poisition).. 2022. 3. 2.
참조 전달 문법 std::move, std::forward https://dev-record.tistory.com/62?category=956403 이동생성자와 보편참조법(universal ref) https://dev-record.tistory.com/56?category=956403 lvalue와 rvalue + 우측값 참조법 * lvalue와 rvalue란? C++ 내에서 모든 식들은 카테고리라는 부가적인 정보를 포함하고 있다. l-value와 r-value가 이에 해.. dev-record.tistory.com 지난 포스팅에서 rvalue와 보편축약 등에 대해 정리해보았다. 이번 포스팅은 이를 응용한 forward 함수의 사용에 대해 알아본다. 지금까지 정리한 내용은 다음과 같다. c++에서 참조는 &와 &&으로 표현된다. &는 lvalue 참조를 의미하.. 2022. 1. 13.