public:
SkAutoTCallVProc(T* obj): fObj(obj) {}
~SkAutoTCallVProc() { if (fObj) P(fObj); }
+
+ operator T*() const { return fObj; }
+ T* operator->() const { SkASSERT(fObj); return fObj; }
+
T* detach() { T* obj = fObj; fObj = NULL; return obj; }
+ void reset(T* obj = NULL) {
+ if (fObj != obj) {
+ if (fObj) {
+ P(fObj);
+ }
+ fObj = obj;
+ }
+ }
private:
T* fObj;
};
~SkAutoTDelete() { SkDELETE(fObj); }
T* get() const { return fObj; }
+ operator T*() { return fObj; }
T& operator*() const { SkASSERT(fObj); return *fObj; }
T* operator->() const { SkASSERT(fObj); return fObj; }
public:
SkAutoTDestroy(T* obj = NULL) : fObj(obj) {}
~SkAutoTDestroy() {
- if (NULL != fObj) {
+ if (fObj) {
fObj->~T();
}
}