将您自己的智能指针与您选择的删除器一起使用:
enum DataPointerType
{
Stack,
Dynamic,
SharedMem,
...
};
template <class T>
class DataPointer
{
public:
DataPointer(T* pointer, DataPointerType type)
: _ptr(pointer), _type(type)
{ }
~DataPointer()
{
switch (type) {
case Stack: break;
case Dynamic: delete _ptr; _ptr = nullptr; break;
...
}
}
T& operator*() { return *_ptr; }
const T& operator*() const { return *ptr; }
T* operator->() { return _ptr; }
const T* operator->() const { return ptr; }
private:
T* _ptr;
DataPointerType _type;
// Prevent copying and destruction, dangerous
DataPointer(const DataPointer& other);
DataPointer& operator=(const DataPointer& other);
};