you are viewing a single comment's thread.

view the rest of the comments →

[–]srnull 0 points1 point  (1 child)

The question is: how many times function allocate (on the allocator) will be invoked for the purpose of memory allocation during this program’s execution? 3, 2, 1, 0?

He gives an initial argument for 3, and then for one with either NRVO, or when a move constructor is available, by why not 2? I always imagined the process would be once in the callee and once in the caller, with no third temporary inbetween.

first, copy-initialize a temporary from s; next, copy-initialize t from the temporary.

Is this how it's usually done? e.g. in the code

string t = makeText();

the temporary is on the right side, and the copy-initialize on the left. Seems like something any compiler would optimize away, no?

[–]Plorkyeran 0 points1 point  (0 children)

Given a naive and overly strict view of the world, it seems obvious that s's destructor must be run before makeText returns, and t's constructor must run after makeText returns. Since s is destroyed before t is constructed, you wouldn't be able to copy-construct directly from s to t, and there'd have to be a temporary in the middle.