std::unique ptr::reset

提供: C++入門
2013年3月23日 (土) 16:24時点におけるDaemon (トーク | 投稿記録)による版 (Daemon がページ「Std::unique ptr::reset」を「std::unique ptr::reset」に移動しました)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク


概要

std::unique_ptrのresetは、ポインタをリセットします。

  • reset() は、メモリを解放します。
  • reset(new Class)/reset(ptr) は、すでにポインタを持っていれば、メモリを解放し、引数で与えられたポインタを扱います。

std::unique_ptr::reset の例 1

ソースコード unique_ptr_reset.cpp

#include <iostream>
#include <exception>
#include <memory>
 
class C {
        public:
                C() { }
                ~C() {
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
                }
                void doit (){
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
                }
};
void
reset () {
        std::unique_ptr<C> p1(new C());
        std::cout << p1.get() << std::endl;
        p1.reset(); // not need delete
        std::cout << p1.get() << std::endl;
}
 
int
main(int argc, char const* argv[])
{
        reset();
        return 0;
}

コンパイル

g++ -I/usr/local/include -L/usr/local/lib unique_ptr_reset.cpp -o unique_ptr_reset

実行例

% ./unique_ptr_reset
0x28404100
C::~C()
0


std::unique_ptr::reset の例 1

reset() で新しいポインタをセットしなおす例です。


ソースコード unique_ptr_reset_2.cpp

#include <iostream>
#include <exception>
#include <memory>
 
class C {
        public:
                C() { }
                ~C() {
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
                }
                void doit (){
                        std::cout << __PRETTY_FUNCTION__ << std::endl;
                }
};
void
reset () {
        std::unique_ptr<C> p1(new C());
        C *c2 = new C();
        std::cout << "P1: ptr=" << p1.get() << std::endl;
        std::cout << "c2: ptr=" << c2 << std::endl;
        p1.reset(c2);
        std::cout << p1.get() << std::endl;     // c2 ptr
}
 
int
main(int argc, char const* argv[])
{
        reset();
        return 0;
}

コンパイル

g++ unique_ptr_reset_2.cpp -o unique_ptr_reset_2
 
g++48 -std=c++11 unique_ptr_reset_2.cpp -o unique_ptr_reset_2

実行例

新しいポインタをセットしたときに、p1が最初に保持していたインスタンスが解放されていることが確認できます。

% ./unique_ptr_reset_2
P1: ptr=0x28404100
c2: ptr=0x28404102
C::~C()
0x28404102
C::~C()


関連項目




スポンサーリンク