std:: out_ptr
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
out_ptr
|
|
헤더에 정의됨
<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
생성
(함수 템플릿) |
|
(C++14)
(C++20)
|
새 객체를 관리하는 unique pointer 생성
(함수 템플릿) |
|
새 객체를 관리하는 shared pointer 생성
(함수 템플릿) |