soraなりの日々 - fc2 -

こころにひっかかったもの

コードの中心でiをさがす -スマートポインタ編-

なんとなく避けてた感じのスマートポインタ。
これからは使っていこうかな。

ココ↓みてそう思いだした。

[いやなブログ:RAII と setjmp/longjmp]
http://0xcc.net/blog/archives/000155.html

もうちょっと調べてだけど、、

このエントリーをはてなブックマークに追加









電気工具があるときに鋸は使わない



去年、ライブラリを作ってる時に似たようなコードを
書かなくちゃいけなくてさ、ものスゴく面倒だったんだよね。。。

>using namespace std;
>int main(int argc, char **argv) {

(省略)

>  delete p;
>  // q の開放を忘れている!
>  return 0;
>}

この戻る時にそれまで作ったオブジェクトを解放しなきゃいけないってやつ。
んで、やってみての感想 → やっぱ便利だね!

それと調べてもみた↓

[むねピ!さん:auto_ptrはダメなのか?]
http://homepage1.nifty.com/munepi/articles/20020826.html

vectorで使えないってなると結構利用する機会減りそう、、、
けど、shared_ptrだけのためにboostを組み込むのも。。

boost自体は、includeにリンクするだけならとっても簡単。
しかしなぁ。。。
ちょっと一考の価値ありだな。


そんで、今回使ったソース(shared_ptr)。
shared_ptrでクラスを作ってvectorに突っ込んでる。そんだけ。
動作とvalgrindでのメモリリークも大丈夫。









#include <boost/shared_ptr.hpp>
#include <vector>
#include <string>

using namespace std;

class obj {
private:
    string str;
public:
    obj(string s) { this->str = s; };
    ~obj() {};
public:
    void disp() { printf( "%s¥n", this->str.c_str() ); };
};

int main(int argc, char** argv)
{
    vector<boost::shared_ptr<obj> > list;
    boost::shared_ptr<obj> p(new obj("test test test!"));

    list.push_back( p );
   
    list[0]->disp();
    return 0;
}



ps:
 今回初めてvalgrindなるのを知ったんだけど、コレ凄い便利ですね。
 ppc mac版、出ないかなぁ。。。


環境:ubuntu linux 6.10 (virtual pc)
  :gcc version 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)


関連記事:コードの中心でiをさがす
このエントリーをはてなブックマークに追加

コメント

そうそう、オレが今読んでる本でもboostのshared_ptrってかなりおすすめされてて、使いたいなぁとか思ったけど、そのためにboostいれるのもどうかと思った。ほかにも使えるのいっぱいありそうやけど、勉強するのめんどくさ。

  • 2007/01/07(日) 21:36:14 |
  • URL |
  • イトセ #-
  • [ 編集]

ですねぇ。
勉強はめんどくさい。。。(^^;

ちなみに「C++ Coding Standards」には
"他の目的では使わないにせよ、shared_ptrのためだけにでも
[Boost]や[C++TR104]を使おう"とかコンテナんとこで書いてありますよん。

  • 2007/01/08(月) 10:53:34 |
  • URL |
  • sora #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/118-699dc4f0
この記事にトラックバックする(FC2ブログユーザー)