TR1ちょっとやってみた@shared_ptrその1

といってもまだ shared_ptr だけですが。

#include 
#include // for std::tr1::shared_ptr

using namespace std::tr1;

class Hoge
{
int _val;
public:
Hoge(int val) : _val(val)
{
std::cout << "Created hoge[" << _val << "]." << std::endl;
}

~Hoge()
{
std::cout << "Destroyed hoge[" << _val << "]." << std::endl;
}

void Say()
{
std::cout << "Say hoge[" << _val << "]." << std::endl;
}
};


void SayHoge(shared_ptr spHoge, int num)
{
if (num <= 0) return;
spHoge->Say();
SayHoge(spHoge, num - 1);
}


int main()
{
shared_ptr spHoge(new Hoge(0));

SayHoge(spHoge, 3);

std::cout << "--------" << std::endl;

SayHoge(shared_ptr(new Hoge(1)), 2);
}

Created hoge[0].
Say hoge[0].
Say hoge[0].
Say hoge[0].

              • -

Created hoge[1].
Say hoge[1].
Say hoge[1].
Destroyed hoge[1].
Destroyed hoge[0].

をを!ちゃんと参照カウントしてますねぇ!
これでboost要らず!とまではまだ行かないですが。

いやーこれでいろんな問題がスマートに解決できそうだ。多分。

次は何を使ってみようかな?


TR1
http://ja.wikipedia.org/wiki/Technical_Report_1

Visual Studio 2008 Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&DisplayLang=ja

Express Edition用
http://www.microsoft.com/downloads/details.aspx?FamilyID=3254c868-bcb9-412c-95c6-d100c872ec60&DisplayLang=ja