On Tuesday, 25 April 2017 at 22:21:33 UTC, Ali Çehreli wrote:
On 04/25/2017 01:20 PM, jmh530 wrote:
> [...]
numbers, allocate
> [...]
to free the
> [...]
Yes.
> [...]
freed by D
> [...]
Correct.
> [...]
of just the
> [...]
C++ smart
> [...]
totally grok it
> [...]
Just by guessing, what we don't see here is that there is a
wrapping layer that does the copying. Disposal logic is called
by that layer. So, your scope(exit) takes place at a higher
layer. Here is made-up-pseudo-code by me. :)
TypeForExcel wrapper_actually_called_by_excel(/* ... */) {
/* ... */
double[] ret_from_your_function = FuncReturnArrayNoGc(/*
... */);
scope (exit) disposal_function(ret_from_your_function);
TypeForExcel arg_to_excel =
copy_for_excel(ret_from_your_function);
return arg_to_excel;
}
Ali
Yep, that's pretty much what happens, except that the
`scope(exit)` is inside a `static if` that checks for the
presence of `@Dispose`.
Atila