「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()でやるのが簡単です。
  
== unique_ptr_operator_equal.cpp の例 ==
+
== std::unique_ptr::operator= の例 ==
  
 
=== ソースコード unique_ptr_operator_equal.cpp ===
 
=== ソースコード unique_ptr_operator_equal.cpp ===
行18: 行19:
 
#include <exception>
 
#include <exception>
 
#include <memory>
 
#include <memory>
 
class C {
 
        public:
 
                C() { }
 
                ~C() {
 
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
 
                }
 
                void doit (){
 
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
 
                }
 
};
 
  
 
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

関連項目