On Wednesday, 28 May 2014 at 14:36:25 UTC, Chris wrote:
I use Appender to fill an array. The Appender is a class
variable and is not instantiated with each function call to
save instantiation. However, the return value or the function
must be dup'ed, like so:
Appender!(MyType[]) append;
public auto doSomething() {
scope (exit) { // clear append }
// ... do something
append ~= item;
return (append.data).dup
}
My question is whether I save anything with Appender as a class
variable here. I have to .dup the return value (+ clear the
Appender). If I had a new Appender with each function call, it
might be just as good.
public auto doSomething() {
Appender!(MyType[]) append;
// ....
return append.data.
}
Right or wrong?
When it comes to optimizations it's hard to say. Benchmarking is
better than relying advice/opinions on the internet in any case.
That being said i doubt that the instantiation cost of the
Appender is relevant. (Btw the appender is not a class variable!
It is a struct with reference semantics). Reusing an appender is
more for those cases where you want to reuse the underlying
memory of the appender itself.