Предположим, у меня есть следующее struct
:
struct IDirect3D
{
IDirect3D() : ref_count_(0) {}
unsigned long Release() { return --ref_count_; }
private:
long ref_count_;
~IDirect3D() {}
};
Я хочу использовать shared_ptr
, как показано в следующем коде (минимальный пример):
int main()
{
boost::shared_ptr<IDirect3D> ptr;
IDirect3D* p = 0; // initialized somewhere
ptr.reset( p, boost::mem_fn( &IDirect3D::Release ) );
return 0;
}
Thisработает нормально в большинстве случаев, но страдает, если p
равно 0
.У меня есть следующее средство удаления, которое я хочу использовать:
template<typename T, typename D>
inline void SafeDeleter( T*& p, D d )
{
if ( p != NULL ) {
(p->*d)();
p = NULL;
}
}
Но следующий код выдает много ошибок (похоже, он сбрасывает все bind.hpp
):
ptr.reset( p, boost::bind( SafeDeleter, _1, &IDirect3D::Release ) );
Что не так с моим использованием bind
?