template< class Pointer = void, class Smart, class... Args >
auto out_ptr( Smart& s, Args&&... args );
Returns an std::out_ptr_t with deduced template arguments that captures arguments for resetting by reference.
The program is ill-formed if construction of the return value (see below) is ill-formed.
[edit] Parameters s - the object (typically a smart pointer) to adapt args... - the arguments for resetting to capture [edit] Return valuestd::out_ptr_t<Smart, P, Args&&>(s, std::forward<Args>(args)...), where P
is
Pointer
, if Pointer
is not a void type. Otherwise,Users may specify the template argument for the template parameter Pointer
, in order to interoperate with foreign functions that take a Pointer*.
As all arguments for resetting are captured by reference, the returned out_ptr_t
should be a temporary object destroyed at the end of the full-expression containing the call to the foreign function, in order to avoid dangling references.
Use std::out_ptr
to adapt a smart pointer for sqlite3_open
, which expects a sqlite3**
as an out parameter.
#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 ... } }[edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4