soraなりの日々 - fc2 -

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

コードの中心でiを理解する -c++0x shared_ptr-

これはやっとかないと、で悶々としてた c++0x
気にはなってたやつが、どうもオレ一人ではなかったみたいで
会社の忘年会のときに地味ーに目立つ事なく、
めでたく発足されましたっ!

因に、c++0x ってのは c++ の次期標準規格。

説明するの面倒だから、詳しくは wikipedia でも見てちょ。

[C++0x]
http://ja.wikipedia.org/wiki/C%2B%2B0x

いやー、すばらしい!!
やっぱ c++ っすよ。

て、ことで 0x会するべって言っときながら、
なんもしないのもなんなので、年末のこの時期に
ちょこっとだけやってみた!

このエントリーをはてなブックマークに追加
会社の人と 0x会発足に当たって、
「開発環境なんにする?」ってな話してて、

vs 2008 はどうも対応してるみたいだし、
「ここは、gcc でなくて、 vs 2008 でやってみよー」
って、ことになってたのね。

なので、vs 2008 で今回ちょっとだけ試したことを書いておく。

今回やったのは、boost でもやった shared_ptr
では、やってみよー。

まずは、vs 2008 に sp1 を当てることから。
sp1 はココにある。

落としてインストールしてちょ。
因に、この sp1 で適用される tr1 でできることは
以下を参照すると良いよ。

[標準 C++ ライブラリ TR1 拡張リファレンス]
http://msdn.microsoft.com/ja-jp/library/bb982198.aspx

簡単に shared_ptr を実装してみる。

[0x_SharedPtr.cpp]
#include "stdafx.h"

#include <memory>
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

inline std::string toStr(int n) { std::stringstream stm; stm << n; return stm.str();}

typedef struct Person {
    int     age;
    string  name;

    void init() {
        age = 0;
        name.clear();
    }
} Person;

int _tmain(int argc, _TCHAR* argv[])
{
    tr1::shared_ptr<Person> p(new Person);

    p->init();
    p->age= 29;
    p->name = "sora";

    cout << "年:" << p->age << endl;
    cout << "名前:" << p->name.c_str() << endl;

    return 0;
}

実行した結果↓
c++0x_01


んで、次は vector 使ってやってみる。

[0x_SharedPtr.cpp]
#include "stdafx.h"

#include <memory>
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

inline std::string toStr(int n) { std::stringstream stm; stm << n; return stm.str();}

typedef struct Person {
    int     age;
    string  name;

    void init() {
        age = 0;
        name.clear();
    }
} Person;

typedef struct Meibo {
    int    total;
    vector<tr1::shared_ptr<Person>> people;

    void init() {
        total = 0;
        people.clear();
    }
} Meibo;

int AddMeibo(tr1::shared_ptr<Meibo>& meibo)
{
    if (!meibo) return -1;
    for(int iCnt=0; iCnt<10; iCnt++) {
        tr1::shared_ptr<Person> p(new Person);

        p->init();
        p->age = iCnt;
        p->name = "test 太郎_";
        p->name += toStr(iCnt);

        meibo->people.push_back(p);
        meibo->total = meibo->people.size();
    }
    return meibo->total;
}

void ShowMeibo(tr1::shared_ptr<Meibo>& meibo)
{
    if (!meibo) return;

    Person* p = NULL;
    vector<tr1::shared_ptr<Person>>::iterator itr;
    for(itr=meibo->people.begin(); itr!=meibo->people.end(); itr++) {
        p = itr->get();
        cout << "年:" << p->age << endl;
        cout << "名前:" << p->name.c_str() << endl;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    tr1::shared_ptr<Person> p(new Person);

    p->init();
    p->age= 29;
    p->name = "sora";

    cout << "年:" << p->age << endl;
    cout << "名前:" << p->name.c_str() << endl;

    tr1::shared_ptr<Meibo> meibo(new Meibo);
    AddMeibo(meibo);
    ShowMeibo(meibo);

    return 0;
}

実行した結果↓
c++0x_02


いやー、やっぱ c++ 楽しいっす!
これからは、c++ ですよ。みなさん!!

けど、やっぱ久しぶりにやったんで、
なんつーか、嗅覚みたいなのが相当鈍っとる。。。

これ、やっぱ c から復習しなきゃな・・・orz

0x会、がんばってこっと。


c++0x に関しては、以下が良くまとまってる。

[Faith and Brave - C++で遊ぼう:C++0xの言語拡張まとめ]
http://d.hatena.ne.jp/faith_and_brave/20071022/1193052163
このエントリーをはてなブックマークに追加

コメント

コメントの投稿


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

トラックバック

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