On Sunday, 12 March 2017 at 21:38:44 UTC, Inquie wrote:
Is there any easy way to create a scope for termination of the object?

I have a template method that takes a type and allocates and deallocates based on that type.

class bar
{
   void foo(T)()
   {
      T x;
      alloc(x);
scope(~this) dealloc(x); // hypothetical that wraps the statement in a lambda and deallocates in the destructor

... x must stay allocated until class instance termination(has to do with COM, can't release it in foo)
   }

}

Now, x cannot be a field because T is unknown(i suppose I could use object, void*, etc, but...).


If it is COM then you should use IUnknown (the COM root interface),or if you are expecting multiple calls to foo, an array of IUnknown. I think the GC will clean up completely for you in either case and call release(?) on the member(s).

Also as it is COM you probably don't need to template it, just choose T to be the most recent ancestor of all (old) T's you would be expecting foo to be instantiated with (e.g. IUnknown if you expect any COM object.



Reply via email to