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