Interfacing with XPCOM
Sergey Gromov
snake.scaly at gmail.com
Thu Dec 4 06:51:29 PST 2008
Tue, 02 Dec 2008 22:32:33 -0800, Walter Bright wrote:
> John Reimer wrote:
>> Is there a ClassInfo flag indicating no-gc-collection for extern(C++)
>> interfaces too?
>
> No. The COM object is special because part of its interface is to do its
> own memory management, that isn't true in general for C++ interfaces.
But what's the typical use case for extern(C++) objects ? I think it's
something like this:
extern(C++) class CppInterfaceClass { ... }
extern(C++) CppInterfaceClass create()
{
return new CppInterfaceClass(...);
}
extern(C++) void destroy(CppInterfaceClass obj)
{
delete obj;
}
Here, there are no references left in D code to the created interface
object and GC is free to collect it even though it's still being used
from within C++ code. I'll have to manage a list of created interface
object simply to keep them alive, getting another multi-threading
headache, or add them as GC roots. I think it's better to assume manual
memory management for extern(C++) objects.
More information about the Digitalmars-d
mailing list