忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スマートポインタ

ども・・・・・・・・・・会長の和佐田雅史です。
今日はスマートポインタについて講義します。


皆さんはnewやdeleteを知っているでしょうか?
動的に変数の領域を確保する時に

Character Chara = new Character;

とすると変数CharaにCharacter型の領域を作成する事が出来ます。
ようするにcで言うmallocを使っているとお考え下さい。

しかし、newで確保したものは解放しないとメモリリークを起こしてしまいます。
mallocで確保したメモリはfree関数で解放しないといけませんよね?

それと同じ事です。

しかし・・・・プログラマと言えど人間ですのでもしかすると解放処理を忘れてしまうかもしれません。

ですのでスマートポインタ( STLではオートポインタ )という物を使います。

std::auto_ptr< 型引数 > ptrObject;

とすると、参照がなくなった時点で勝手に解放してくれます。
javaのガーベージコレクションとまでは行きませんが便利ですよね?

ただ、中には自分でスマートポインタを作りたいという人が居るかもしれません。
なので一応簡易版をここに乗せておきます。

使いたい人はどうぞ。
※1.動的に確保したObjectのみに適用するようにして下さい
※2.ネームスペース( Wasadaとかptrとか )は自由に書き換えてもらって結構です。

使用例は


Wasada::ptr::auto_ptr< Character > Chara();

Chara->m_hp = 1;


等です。

それではお疲れ様でした。


namespace Wasada
{

namespace ptr
{

// オートポインタ定義
template< typename Type > class auto_ptr
{
private:
 Type* _ptr;
 friend class Type;
 
public:
 // ptrアクセッサ
 Type& operator*() const {return *_ptr;}
 Type* operator->() const {return _ptr;}

 
 // コンストラクタ
 auto_ptr(const Type* ptr)
 {
//  this->_ptr = NULL;
  this->_ptr = ptr;
 }

 auto_ptr()
 {
  this->_ptr = NULL;
  this->_ptr = new Type;
 }


 // デストラクタで勝手に解放
 virtual ~auto_ptr()
 {
  if( this->_ptr )
  {
   delete _ptr;
  }
 }
};

}
}

拍手[0回]

PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]