3 ms·
To me at least build_new_object example seems horribly wrong: If you allocate the object on the stack and then returns it, it will go out of scope with the func
by tqh 13y ago
To me at least build_new_object example seems horribly wrong: If you allocate the object on the stack and then returns it, it will go out of scope with the function, and the memory overwritten with next stack usage. Or does modern C++ do some magic nowadays?
- adamnemecek 13y agoI don't think that it even can do anything about that. It will just go out of scope and that's that.
- sixbrx 13y agoNo it will use a copy or move constructor to return the object by value, no problem there. Notice the value is being returned, not a pointer to the value.
- xyzzy123 13y agoRight, and on a good day you might get named return value optimization. http://msdn.microsoft.com/en-us/library/ms364057(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/ms364057(v=vs.80).as... If the compiler can figure out what you're doing, the huge_object you declared can be aliased to an object in the caller's stack frame which results in no copies or moves at all.
- tqh 13y agoAh thanks for clearing that up. It's in a newer (C++03?) standard. I still have to deal with gcc 2.95 on a regular basis so I'm stuck in the old ways. I guess that is why the title was 'Modern C++'.
- deleted 13y ago[deleted]