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

Reply via email to