WrapperPointer类和C ++中堆栈分配对象的释放

时间:2011-10-13 06:37:39

标签: c++ delete-operator

我正在为标量值设计一个包装类(有点类似于std::autoPtr,但我有不同的用途):

template <typename T>
class ScalarPtr
{
private:
   T* m_data;
   ...
public:
   ScalarPtr(T *data): m_data(data)
   { ... }
   T& operator* ();
   T* operator -> ();
   ~ScalarPtr() 
   {
      if(m_data) 
         delete m_data; ...
   }
};

现在的问题是,当我还想将这个类用于堆栈分配的内存对象时:

float temp=...
ScalarPtr<float> fltPtr(&temp);

天真的方法是在构造函数中传递boolean以指定是否释放,但是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我不确定除了布尔标志之外是否还有更好的方法。 正如您所知(并因此询问Q),这使得界面对最终用户而言是非直观的。

包装器/资源管理类的目的是实现RAII,其中资源本身负责隐式地释放其资源(在这种情况下是动态内存)。鉴于堆栈变量被自动销毁超出其范围,使用资源管理包装器似乎相当奇怪。我宁愿不喜欢这样做。

但是,鉴于你想通过这个包装类保持对你的类的统一访问,最简单但不那么优雅的方式似乎是布尔标志。