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

  显示原文与译文双语对照的内容
0 0

我正在为标量值设计一个包装类( 有点类似 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);

简单的方法是在构造函数中传递布尔值来指定是否释放,但是否有更好的方法?

时间: 原作者:

0 0

我不确定是否有比布尔标志更好的方法。 你知道( 所以问Q ) 会使接口成为最终用户,而不是 intutive 。

包装/资源管理类的用途是实现自动化,其中资源本身负责隐式释放它的资源( 在这种情况下动态内存) 。 由于堆栈变量在它的作用域之外被自动销毁,因这里使用资源管理包装程序看起来相当奇怪。 我宁愿不这么做。

但是,由于你希望通过这个包装类保持一个统一的访问权限,最简单的方法是布尔标志。

原作者:
...