我有问题实现像下面这样的结构。这个想法是,我在某个头文件中定义了一个实用函数,它分配了某种资源。为了减轻客户自己解放它的必要性,我想将它包装成一个智能指针。 不幸的是,我不知何故需要删除类型的客户端,并有麻烦转发 - 适当地声明它。我现在的解决方案看起来像这样,导致多个定义错误,因为删除程序是重新定义的,每增加一个包含utility.h如何转发声明自定义unique_ptr
这是我正在寻找的优雅解决方案吗?
// utilities.h
namespace foo
{
auto del = [](MyResource* res) { Deallocate(res); };
std::unique_ptr<MyResource, decltype(del)> getResource();
}
// utilities.cpp
namespace foo
{
std::unique_ptr<MyResource, decltype(foo::del)> getResource()
{
return std::unique_ptr<MyResource, decltype(foo::del)>(Allocate(), del);
}
}
使删除器成为一个*函数*而不是一个lambda对象变量,并将该函数标记为'inline'? –
@JoachimPileborg这应该是一个答案。 OTOH,它可以防止这种'unique_ptr'的默认构造。 – Angew