我正在为标量值设计一个包装类(有点类似于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以指定是否释放,但是有更好的方法吗?
答案 0 :(得分:2)
我不确定除了布尔标志之外是否还有更好的方法。 正如您所知(并因此询问Q),这使得界面对最终用户而言是非直观的。
包装器/资源管理类的目的是实现RAII,其中资源本身负责隐式地释放其资源(在这种情况下是动态内存)。鉴于堆栈变量被自动销毁超出其范围,使用资源管理包装器似乎相当奇怪。我宁愿不喜欢这样做。
但是,鉴于你想通过这个包装类保持对你的类的统一访问,最简单但不那么优雅的方式似乎是布尔标志。