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

标签 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);

天真的方法是在构造函数中传递 bool 值来指定是否释放,但有没有更好的方法?

最佳答案

我不确定是否有比 bool 标志更好的方法。 如您所知(并因此询问 Q),这使得界面对最终用户来说相当不直观。

包装器/资源管理类的目的是实现 RAII,其中资源本身负责隐式释放其资源(在本例中为动态内存)。鉴于堆栈变量会在其范围之外自动销毁,为它们使用资源管理包装器似乎很奇怪。我宁愿不这样做。

但是,鉴于您希望通过这个包装类保持对您的类的统一访问,最简单但不太优雅的方法似乎是 bool 标志。

关于c++ - C++ 中堆栈分配对象的 WrapperPointer 类和释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750298/

相关文章:

c++ - 您如何声明和使用重载的池运算符删除?

c++ - C++ 中的 delete vs delete[] 运算符

c++ - 无法在 C++ 中删除 char 指针

c++ - boost::算法::包含

C++如何在迭代时从 vector 中删除

android - 无法将 math.h 放入命名空间

c++ - 删除这个?它有什么作用?

c++ - QWidget 改造

c++ - 只是一些简单的错误

C++删除错误