If your compiler supports the NRVO then no copy will be made, provided certain conditions are met in the function returning the object. Thankfully, this was finally added in Visual C++ 2005 (v8.0) This can have a major +ve impact on perf if the container is large, obviously.
If your own compiler docs do not say whether or not it’s supported, you should be able to compile the C++ code to assembler (in optimized/release mode) and check what’s done using a simple sample function.
There’s also an excellent broader discussion here