Namespaces
Variants

std::experimental:: make_unique_resource_checked

From cppreference.net
헤더 파일에 정의됨 <experimental/scope>
template < class R, class D, class S = std:: decay_t < R > >

std :: experimental :: unique_resource < std:: decay_t < R > , std:: decay_t < D >>
make_unique_resource_checked ( R && r, const S & invalid, D && d )

noexcept ( /*see below*/ ) ;
(라이브러리 펀더멘털 TS v3)

unique_resource 를 생성하고, 저장된 리소스 핸들을 std:: forward < R > ( r ) 로 초기화하며, 딜리터를 std:: forward < D > ( d ) 로 초기화합니다. 생성된 unique_resource bool ( r == invalid ) false 인 경우에만 리소스를 소유합니다.

프로그램은 표현식 r == invalid bool로 문맥적 변환 bool 될 수 없으면 형식이 잘못되었으며, 변환 결과가 정의되지 않은 동작을 발생시키거나 예외를 발생시키는 경우 동작은 정의되지 않습니다.

목차

매개변수

r - 리소스 핸들
d - 리소스를 해제하는 데 사용할 삭제자
invalid - 리소스 핸들이 유효하지 않음을 나타내는 값

반환 값

위에서 설명한 unique_resource 입니다.

예외

저장된 리소스 핸들과 삭제자의 초기화 과정에서 발생하는 모든 예외.

참고 사항

make_unique_resource_checked 는 잘못된 인자로 삭제자 함수를 호출하는 것을 방지하기 위해 존재합니다.

리소스 핸들 r 는 반환 값으로 복사되거나 이동되며, 생성된 unique_resource 는 항상 객체 타입을 가진 기본 리소스 핸들을 보유합니다.

예제

#include <cstdio>
#include <experimental/scope>
int main()
{
    // fopen이 실패할 때 fclose 호출 방지
    auto file = std::experimental::make_unique_resource_checked(
        std::fopen("potentially_nonexistent_file.txt", "r"),
        nullptr,
        [](std::FILE *fptr) { std::fclose(fptr); }
    );
    if (file.get())
        std::puts("The file exists.");
    else
        std::puts("The file does not exist.");
}

가능한 출력:

The file does not exist.

참고 항목

웹페이지의 텍스트를 한국어로 번역합니다: HTML 태그나 속성은 번역하지 마십시오. 원래 형식을 유지하십시오. ,
,  태그 내부의 텍스트는 번역하지 마십시오.  
C++ 관련 용어는 번역하지 마십시오. 정확성과 전문성이 요구됩니다.