본문 바로가기

개발/C++ (98,03,11,14,17,20,23)75

Modern C++ : std::weak_ptr (11) std::weak_ptr 개요std::weak_ptr는 std::shared_ptr가 관리하는 객체에 대한 비소유(non-owning) 참조를 제공하는 스마트 포인터입니다. std::shared_ptr와 달리 std::weak_ptr는 참조 카운트를 증가시키지 않으므로 순환 참조(circular reference) 문제를 해결하는 데 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++11: std::weak_ptr가 도입되었습니다. 내용 설명std::weak_ptr는 std::shared_ptr 인스턴스를 가리키지만, 해당 객체의 생명 주기에 영향을 주지 않습니다. 즉, std::weak_ptr가 가리키는 객체는 마지막 std::shared_ptr가 소멸될 때 함께 소멸되며, std::weak_ptr.. 2025. 10. 15.
Modern C++ : std::shared_ptr (11, 17) std::shared_ptr 개요std::shared_ptr는 하나의 리소스를 여러 포인터가 공유해서 사용할 수 있게 하는 스마트 포인터입니다. 참조 카운팅(Reference Counting) 방식을 사용하여, 자신을 참조하는 shared_ptr가 몇 개인지 계산합니다. 참조 카운트가 0이 되면 자동으로 메모리를 해제합니다.이를 통해 여러 객체가 동일한 메모리 리소스에 안전하게 접근하고 소유권을 공유할 수 있으며, 리소스의 생명 주기를 자동으로 관리하여 메모리 누수를 방지합니다. C++ 버전별 주요 키워드 도입 시기C++11: std::shared_ptr가 표준 라이브러리에 처음 도입되었습니다.C++11: std::make_shared가 도입되어 더 안전하고 효율적인 shared_ptr 생성을 지원합니다.. 2025. 10. 14.
Modern C++ : std::unique_ptr (11, 14) std::unique_ptr 개요std::unique_ptr는 C++11부터 도입된 스마트 포인터로, 동적으로 할당된 객체에 대한 독점적인 소유권을 관리합니다. unique_ptr가 소멸될 때 (예: 범위를 벗어날 때) 관리하던 객체도 자동으로 소멸시켜, 메모리 누수를 방지하고 예외 안전성을 높입니다. 복사가 불가능하고 이동만 가능하다는 특징이 있습니다. C++ 버전별 주요 키워드 도입 시기C++11: std::unique_ptr 도입C++14: std::make_unique 헬퍼 함수 도입 내용 설명std::unique_ptr는 이름 그대로 포인터가 가리키는 객체에 대한 유일한(unique) 소유권을 가집니다. 이는 복사 생성자나 복사 대입 연산자가 없어 복사가 원천적으로 불가능하며, 소유권은 std:.. 2025. 10. 13.
Modern C++ : std::format (20) std::format 개요std::format은 C++20부터 도입된 기능으로, 타입-세이프(type-safe)하며 확장 가능한 방식으로 문자열을 포맷팅합니다. Python의 str.format이나 C#의 String.Format과 유사한 기능을 제공하여 기존의 printf 계열 함수나 iostreams보다 더 안전하고 편리한 대안을 제시합니다. C++ 버전별 주요 키워드 도입 시기C++20: std::format, std::format_to, std::format_to_n이 표준 라이브러리에 도입되었습니다. 내용 설명std::format 라이브러리는 다양한 방식으로 문자열을 생성하고 포맷팅하는 기능을 제공합니다.std::format: 포맷 문자열과 인자들을 받아 포맷팅된 새로운 std::string 객.. 2025. 10. 12.
Modern C++ : std::ranges (20) std::ranges 개요std::ranges는 C++20에 도입된 주요 기능으로, 컬렉션(컨테이너)을 다루는 방식을 혁신적으로 개선합니다. 기존의 반복자(iterator) 기반의 알고리즘을 파이프라이닝(pipelining) 가능한 '뷰(view)'와 '어댑터(adapter)'를 통해 더 직관적이고 가독성 높게 사용할 수 있도록 합니다. 이를 통해 복잡한 데이터 처리 로직을 간결하게 표현할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++20 : std::ranges, std::views, concepts와 함께 도입되었습니다. 내용 설명std::ranges 라이브러리는 크게 세 가지 요소로 구성됩니다.Ranges (범위): 반복 가능한 요소의 시퀀스를 나타내는 개념입니다. std::vector,.. 2025. 10. 11.
Modern C++ : std::Attributes (11, 14, 17, 20) std::Attributes 개요C++ Attributes는 코드에 메타데이터를 추가하는 표준화된 방법을 제공합니다. 이 메타데이터는 컴파일러가 경고를 생성하거나, 코드를 최적화하거나, 특정 규칙을 강제하는 데 사용될 수 있습니다. 속성은 [[attribute]] 구문을 사용하여 지정됩니다. C++ 버전별 주요 키워드 도입 시기C++11: [[noreturn]], [[carries_dependency]]C++14: [[deprecated]]C++17: [[fallthrough]], [[nodiscard]], [[maybe_unused]]C++20: [[likely]], [[unlikely]], [[no_unique_address]] 내용 설명[[nodiscard]]: 함수의 반환 값을 무시해서는 안 됨을.. 2025. 10. 10.
Modern C++ : std::any (17) std::any 개요std::any는 C++17부터 도입된 기능으로, 모든 타입의 값을 안전하게 저장하고 추출할 수 있는 타입 안전(type-safe) 컨테이너입니다. 특정 타입에 국한되지 않고 다양한 타입의 객체를 하나의 변수에 담아야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++17: std::any가 표준 라이브러리에 처음 도입되었습니다. 내용 설명std::any는 내부에 어떤 타입의 값이든 저장할 수 있는 클래스 템플릿입니다. void*처럼 타입을 완전히 잃어버리는 것과 달리, std::any는 저장된 값의 타입을 기억하고 있어 타입 안전성을 보장합니다.주요 멤버 함수는 다음과 같습니다.any_cast(): std::any 객체에 저장된 값을 특정 타입 T로 캐스팅하여 반.. 2025. 9. 30.
Modern C++ : std::variant (17) std::variant 개요std::variant는 타입 안전(type-safe) 공용체(union)로, C++17 표준 라이브러리에 추가된 기능입니다. 주어진 여러 타입 중 하나의 값을 가질 수 있으며, 현재 어떤 타입의 값을 저장하고 있는지 항상 기억합니다. 기존 C 스타일 공용체와 달리 타입 정보가 없어 발생할 수 있는 오류를 컴파일 또는 런타임에 방지할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++17: std::variant가 처음 도입되었습니다. 내용 설명std::variant는 템플릿 인자로 명시된 타입들 중 하나의 인스턴스만 저장할 수 있는 컨테이너입니다. 예를 들어 std::variant은 int, double, std::string 중 하나의 값만 가질 수 있습니다.주요 기능.. 2025. 9. 29.
Modern C++ : std::optional (17) std::optional 개요std::optional은 C++17부터 도입된 기능으로, 값이 있을 수도 있고 없을 수도 있는 상황을 명시적으로 표현하는 데 사용되는 템플릿 클래스입니다. 함수가 유효한 값을 반환하지 못하는 경우, 이전에는 nullptr나 특별한 값(예: -1)을 반환하여 실패를 알렸습니다. std::optional은 이러한 상황을 더 안전하고 명확하게 처리할 수 있는 방법을 제공합니다. C++ 버전별 주요 키워드 도입 시기C++17: std::optional 도입 내용 설명std::optional 객체는 타입 T의 값을 포함하거나, 아무 값도 포함하지 않는 두 가지 상태를 가질 수 있습니다. 값이 없는 상태는 std::nullopt를 사용하여 표현합니다.주요 멤버 함수는 다음과 같습니다... 2025. 9. 28.