I am interacting with (not-owned-by-me) API that takes a raw pointer to Thing and sometimes deletes it on its own, basically something like:
bool foo(Thing* ptr) {
    if (/* some condition */) {
        delete ptr;
        return true;
    } else {
        return false;
    }
}
Now I'm writing some tests that on a side interact with this method, and I would want to avoid writing typical T* ptr = new Thing(); bool res = foo(ptr); /* real test */; if (!res) { delete ptr; }; spread across the code.
So I've created some kind of "tracking-wrapper" that looks like this:
template <typename T> class Holder {
public:
    // Subclass of Z where the dtor will just update Holder's state.
    template <typename Z> class Helper : public Z {
    public:
        Helper(Holder<Z>& holder): holder_{holder} {}
        virtual ~Helper() { holder_.markDeleted(); }
    private:
        Holder<Z>& holder_;
    };
    ~Holder() {
        if (!deleted_) { delete ptr; }
    }
    void markDeleted() { deleted_ = true; }
    T* data() { return ptr; }
private:
    bool deleted_ = false;
    T* ptr = new Helper<T>(*this);
};
so basically I can use it like this:
Holder<Thing> h;
foo(h.data());
with Holder's destructor doing the cleanup of Thing* if necessary.
Is there any alternative for this custom code (e.g. in standard library)?
We can assume the following:
- T's destructor is virtual,
 - T does not require arguments to be constructed,
 - we cannot modify T.