unique_handle <t,traits =“”>内存和其他资源的包装器

时间:2017-04-05 23:56:03

标签: memory-management c++03

关于创建一个拥有资源并在删除时释放它们的RAII类unique_handlemsdn上有一篇很好的文章。请参阅以下源代码:

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的实例,并将其存储在vectorlist等集合中。问题是集合需要一个存储的类来拥有一个复制构造函数。 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。还有其他替代解决方案吗?

0 个答案:

没有答案