@SteveRichter: unique_ptr is non-copyable by design as the unique_ptr owns the memory. If you want to transfer ownership, you need to std::move otherwise you'd have two unique_ptr's owning the same data (violating the uniqueness).

If you want to share ownership of memory between multiple smart pointers, you would use shared_ptr instead as its reference count is adjusted on copy/assignment, etc.

As for the std::vector of std::unique_ptr, this can be done with emplacement, this will construct the unique_ptr inside the vector itself with the raw pointer passed in. But i think with move semantics, std::vector<std::wstring> might be more appropriate.

 

I'm still figuring out all of the c++11 guidance myself, but maybe something like this:

std::wstring msg(L"The unique_ptr class supersedes auto_ptr");
::OutputDebugString(msg.c_str( ));
msgList.push_back(std::move(msg));