上のに補足。

intrusive_ptrってあまり人気無いんですかね。Googleで検索してもほとんど出てこなかったり。もしかしてDirectXでintrusive_ptr使ってたりすると初心者?で、なんでそんなのを検索していたかというと、

IDirect3DSwapChain9* pSwapChainRaw = NULL;
m_pDevice = CreateAdditionalSwapChain( &d3dpp, &pSwapChainRaw );
m_pSwapChain = intrusive_ptr< IDirect3DSwapChain >( pSwapChainRaw, false );

のような3行のプログラムを短く出来ないかなぁと考えたからです。けど、前例がなかったし、面倒だから頓挫。