【发布时间】:2015-11-04 13:49:00
【问题描述】:
我在实现如下构造时遇到问题。这个想法是我在一些头文件中定义了一个实用程序函数,它分配了某种资源。为了让客户不必自己释放它,我想把它包装成一个智能指针。 不幸的是,我不得不以某种方式将删除器类型传递给客户端,并且无法正确地向前声明它。我当前的解决方案看起来像这样,导致多个定义错误,因为删除器是使用实用程序的每个附加包含重新定义的。h
我正在寻找哪种优雅的解决方案?
// 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-object变量,并将函数标记为
inline? -
@JoachimPileborg 这应该是一个答案。 OTOH,它可以防止默认构造这样的
unique_ptr。
标签: c++ unique-ptr forward-declaration