「std::unique ptr::operator=」の版間の差分
提供: C++入門
(ページの作成:「<!-- vim: filetype=mediawiki --> 読み方 __TOC__ == 概要 == == unique_ptr_operator_equal.cpp の例 == === ソースコード unique_ptr_operator_equal.cpp ==...」) |
細 (Daemon がページ「Std::unique ptr::operator=」を「std::unique ptr::operator=」に移動しました) |
||
(同じ利用者による、間の5版が非表示) | |||
行2: | 行2: | ||
vim: filetype=mediawiki | vim: filetype=mediawiki | ||
--> | --> | ||
− | |||
− | |||
__TOC__ | __TOC__ | ||
行9: | 行7: | ||
== 概要 == | == 概要 == | ||
+ | [[std::unique_ptr]]のポインタを[[std::unique_ptr]]に直接代入することができません。 | ||
+ | 明示的なrelease()とreset()を利用するか、std::move()を利用します。 | ||
+ | [[std::unique_ptr]]からほかの[[std::unique_ptr]]に所有権を移動する場合は、std::move()でやるのが簡単です。 | ||
− | == | + | == std::unique_ptr::operator= の例 == |
=== ソースコード unique_ptr_operator_equal.cpp === | === ソースコード unique_ptr_operator_equal.cpp === | ||
行18: | 行19: | ||
#include <exception> | #include <exception> | ||
#include <memory> | #include <memory> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
int | int | ||
行61: | 行51: | ||
* [[std::unique_ptr]] | * [[std::unique_ptr]] | ||
+ | * [[std::unique_ptr::reset]] | ||
+ | * [[std::unique_ptr::release]] | ||
+ | * [[std::unique_ptr::get]] | ||
+ | * [[std::unique_ptr::swap]] | ||
* [[スマートポインタ]] | * [[スマートポインタ]] |
2013年3月23日 (土) 16:30時点における最新版
目次
概要
std::unique_ptrのポインタをstd::unique_ptrに直接代入することができません。 明示的なrelease()とreset()を利用するか、std::move()を利用します。 std::unique_ptrからほかのstd::unique_ptrに所有権を移動する場合は、std::move()でやるのが簡単です。
std::unique_ptr::operator= の例
ソースコード unique_ptr_operator_equal.cpp
#include <iostream> #include <exception> #include <memory> int main(int argc, char const* argv[]) { std::unique_ptr<int> foo(new int(123)); std::unique_ptr<int> bar; bar = std::move(foo); std::cout << "foo: " << foo.get() << std::endl; std::cout << "bar: " << bar.get() << std::endl; return 0; }
コンパイル
g++ unique_ptr_operator_equal.cpp -o unique_ptr_operator_equal g++48 -std=c++11 unique_ptr_operator_equal.cpp -o unique_ptr_operator_equal
実行例
% ./unique_ptr_operator_equal foo: 0 bar: 0x28404088