Thread overview | |||||
---|---|---|---|---|---|
|
December 29, 2015 virtual destructor in C++ integration: bug or me being stupid? | ||||
---|---|---|---|---|
| ||||
cpp.cpp: class Oops { public: virtual ~Oops() {} virtual int number() const { return 42; } }; Oops* newOops() { return new Oops; } d.d: import std.stdio; extern(C++) { interface Oops { int number() const; } Oops newOops(); } void main() { auto oops = newOops(); writeln(oops.number()); } I get garbage in the output (I found this due to a crash in much more complicated code). If I comment out the virtual destructor, it works. It seems that the presence of the virtual destructor changes the layout and D doesn't know about it. Thinking about it now, it makes sense, how would D know? The problem here is that I don't know what the workaround is. Abstract classes in C++ usually have virtual destructors... Atila |
December 29, 2015 Re: virtual destructor in C++ integration: bug or me being stupid? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Atila Neves | On Tuesday, 29 December 2015 at 18:32:23 UTC, Atila Neves wrote: > The problem here is that I don't know what the workaround is. The one I used (well, last time I tried this) was to just put a dummy function in the D interface that is a placeholder for it. interface C++Class { // at the same place as void _dontCallMeIamjustadestructor(); void other_function_you_actually_want(); } |
December 30, 2015 Re: virtual destructor in C++ integration: bug or me being stupid? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Tuesday, 29 December 2015 at 18:41:41 UTC, Adam D. Ruppe wrote:
> On Tuesday, 29 December 2015 at 18:32:23 UTC, Atila Neves wrote:
>> The problem here is that I don't know what the workaround is.
>
> The one I used (well, last time I tried this) was to just put a dummy function in the D interface that is a placeholder for it.
>
> interface C++Class {
> // at the same place as
> void _dontCallMeIamjustadestructor();
> void other_function_you_actually_want();
> }
Ugh. As long as it works... thanks!
Atila
|
Copyright © 1999-2021 by the D Language Foundation