How can a unique_ptr be returned by value without std::move? [duplicate]
问题 This question already has answers here : Returning unique_ptr from functions (5 answers) Closed 5 years ago . std::unique_ptr<int> ptr() { std::unique_ptr<int> p(new int(3)); return p; // Why doesn't this require explicit move using std::move? } // Why didn't the data pointed to by 'p' is not destroyed here though p is not moved? int main() { std::unique_ptr<int> a = ptr(); // Why doesn't this require std::move? std::cout << *a; // Prints 3. } In the above code, the function ptr() returns a