关于创建一个拥有资源并在删除时释放它们的RAII类unique_handle
,msdn上有一篇很好的文章。请参阅以下源代码:
template <typename Type, typename Traits>
class unique_handle
{
unique_handle(unique_handle const &);
unique_handle & operator=(unique_handle const &);
void close() throw()
{
if (*this)
{
Traits::close(m_value);
}
}
Type m_value;
public:
explicit unique_handle(Type value = Traits::invalid()) throw() :
m_value(value)
{
}
~unique_handle() throw()
{
close();
}
}
我想创建此unique_handle
的实例,并将其存储在vector
或list
等集合中。问题是集合需要一个存储的类来拥有一个复制构造函数。 vector
需要operator=
来移动内存中的对象。
然后作者添加了移动构造函数,如下所示,解决了C ++ 11中的上述要求:
unique_handle(unique_handle && other) throw() :
m_value(other.release())
{
}
unique_handle & operator=(unique_handle && other) throw()
{
reset(other.release());
return *this;
}
我的问题是如果C ++ 11不可用,我如何将此类用于集合。我有C ++ 03。我知道boost有unique_ptr
可以在以前版本的C ++中使用,并且可以存储在集合中,但它非常复杂并且需要大量的头文件。我不确定我是否可以在我的项目中使用boost。还有其他替代解决方案吗?