Namespaces
Variants

std:: out_ptr

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
헤더에 정의됨 <memory>
template < class Pointer = void , class Smart, class ... Args >
auto out_ptr ( Smart & s, Args && ... args ) ;
(C++23부터)

인수를 참조로 캡처하여 재설정하는 std::out_ptr_t 를 추론된 템플릿 인수와 함께 반환합니다.

반환값(아래 참조)의 생성이 형성되지 않을 경우 프로그램은 형성되지 않습니다.

목차

매개변수

s - 적응할 객체 (일반적으로 스마트 포인터)
args... - 재설정을 위해 캡처할 인자들

반환값

std:: out_ptr_t < Smart, P, Args && > ( s, std:: forward < Args > ( args ) ... ) , 여기서 P

  • Pointer , 만약 Pointer void 타입이 아닌 경우. 그렇지 않으면,
  • Smart :: pointer , 유효하며 타입을 나타내는 경우. 그렇지 않으면,
  • Smart :: element_type * , 만약 Smart :: element_type 가 유효하며 타입을 나타내는 경우. 그렇지 않으면,
  • std:: pointer_traits < Smart > :: element_type * .

참고 사항

사용자는 템플릿 매개변수 Pointer 에 대한 템플릿 인수를 지정하여 Pointer * 를 취하는 외부 함수와 상호 운용할 수 있습니다.

리셋팅을 위한 모든 인수들이 참조로 캡처되므로, 반환된 out_ptr_t 은 외부 함수 호출을 포함하는 전체 표현식의 끝에서 소멸되는 임시 객체여야 합니다. 이는 댕글링 참조를 방지하기 위함입니다.

기능 테스트 매크로 표준 기능
__cpp_lib_out_ptr 202106L (C++23) std::out_ptr , std::inout_ptr
202311L (C++26) 독립 실행형 std::out_ptr std::inout_ptr

예제

std::out_ptr 를 사용하여 스마트 포인터를 sqlite3_open 에 적응시키십시오. 이 함수는 출력 매개변수로 sqlite3** 를 기대합니다.

#include <memory>
#include <sqlite3.h>
int main()
{
    auto close_db = [](sqlite3* db) { sqlite3_close(db); };
    {
        // open an in-memory database, and manage its lifetime with std::unique_ptr
        std::unique_ptr<sqlite3, decltype(close_db)> up;
        sqlite3_open(":memory:", std::out_ptr(up));
        sqlite3* db = up.get();
        // do something with db ...
    }
    {
        // same as above, but use a std::shared_ptr
        std::shared_ptr<sqlite3> sp;
        sqlite3_open(":memory:", std::out_ptr(sp, close_db));
        sqlite3* db = sp.get();
        // do something with db ...
    }
}

참고 항목

(C++23)
연관된 스마트 포인터와 리셋 인자를 가진 inout_ptr_t 생성
(함수 템플릿)
새 객체를 관리하는 unique pointer 생성
(함수 템플릿)
새 객체를 관리하는 shared pointer 생성
(함수 템플릿)