我有来自第三方库的几个类,类似于StagingConfigDatabase类,该类在创建后需要销毁。我为RAII使用了shared_ptr,但更愿意使用单行代码创建shared_ptr,而不是如示例所示使用单独的模板仿函数。也许使用lambdas?或绑定(bind)?
struct StagingConfigDatabase
{
static StagingConfigDatabase* create();
void destroy();
};
template<class T>
struct RfaDestroyer
{
void operator()(T* t)
{
if(t) t->destroy();
}
};
int main()
{
shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), RfaDestroyer<StagingConfigDatabase>());
return 1;
}
我在考虑类似的东西:
shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), [](StagingConfigDatabase* sdb) { sdb->destroy(); } );
但这不能编译:(
帮助!
最佳答案
我假设create
在StagingConfigDatabase
中是静态的,因为如果没有它,您的初始代码将无法编译。关于销毁,您可以使用一个简单的 std::mem_fun
:
#include <memory>
boost::shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), std::mem_fun(&StagingConfigDatabase::destroy));