|
|
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ] ヘッダ検索 ■ SharedPointer(シェアードポインタ)
DESC
SmartPtr のコピーの問題点を改良したポインタクラスのこと。
参照カウンタをもち, どの変数からも参照されない時点で解放する。
ThreadSafe な設計である. ( CntRef の操作時に排他制御がされる. )
-> ( SharedPointer を Thread( Worker ) で共有しなければ OK )
POINT
生のポインタをかえすかわりに, SharedPointer を返せば OK
// ヒープにTestオブジェクトを生成
// この時点で参照カウントはこの時点で1である
boost::shared_ptr< Test> p(new Test()); // p.cntRef = 1;
{
boost:shared_ptr< Test> pp;
// スマートポインタをコピーする(参照カウントが+1される)
pp = p; // pp.refCnt = 2; p.refCnt = 1; // 相手先は cntRef を copy してさらに ++ !
std::cout < < "pp will destruct" < < std::endl;
// このスコープを抜けたときにppはなくなり ppが指しているTestオブジェクト
// への参照カウントは-1されるが 、まだ0ではないためTestオブジェクトは開放されない。
}
// pが指しているTestオブジェクトはまだ開放されていない
|
|






