On 21 May 2018 at 15:03, Jonathan M Davis via Digitalmars-d <[email protected]> wrote: > On Monday, May 21, 2018 14:33:44 Manu via Digitalmars-d wrote: >> extern(C++) classes. >> >> Currently, we don't add destructors to the vtable... we suggest that >> users need to create some dummy virtual functions to fill those vtable >> slots so that the vtable layout otherwise matches the C++ class. >> >> This leaves us in a position where destruction doesn't work for >> polymorphic types. > > How are you destroying any C++ types from D at all?
Awkwardly... and that's the whole point here ;) That's what I intend to fix! DMD will need to learn to call the first vtable slot for extern(C++) destruction. > extern(C++) classes get constructed and destroyed/deleted in C++ code. For now... It is a terrible inconvenience! > I certainly have no problem with attempts to improve our integration with > C++, but it sounds to me like you're talking like you're currently calling > C++ destructors from D, Correct. But it's all bullshit, and needs to die with fire. (or, die with a proper solution even!) > and it's not working because they're not virtual, You usually add `void _dtor()` at the first virtual slot and implement that function to manually call __xdtor. It's a terrible hack, but it works. > when it's my understanding that doing that at all is unsupported - though my > understanding could certainly be outdated. Your understand is current, but hopefully it will be out of date soon! :)
