我有来自第三方库的几个类,类似于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(); } );

但这不能编译:(

帮助!

最佳答案

我假设createStagingConfigDatabase中是静态的,因为如果没有它,您的初始代码将无法编译。关于销毁,您可以使用一个简单的 std::mem_fun :

#include <memory>

boost::shared_ptr<StagingConfigDatabase> pSDB(StagingConfigDatabase::create(), std::mem_fun(&StagingConfigDatabase::destroy));

10-07 13:43