// Illustrates how a unique pointer can be passed to a function. // In f1 by value, and in f2 by const reference. // Inspired from Stroustrup 4ed, page 989. #include #include #include #include "point.h" class SomeProblem{}; // Receives a (unique) pointer p by value, works on the pointed object, and returns it. std::unique_ptr f1(std::unique_ptr p){ p->displace(1,1); return p; } // Receives a (unique) pointer p by const reference, and works on it. (No need for return). void f2(const std::unique_ptr& p){ p->displace(1,1); } int main(){ std::unique_ptr p0{new Point{1,2}}, p1, p2; p1 = move(p0); // The pointer to Point{1,2} is moved from p0 to p1. Must use move! p2 = f1(move(p1)); // ... and moved into f1, where the Point is operated on, // and the pointer is moved out again via return. std::cout << *p2 << std::endl; // (2,3) // The exanple same with f2 that uses a const reference: std::unique_ptr q0{new Point{1,2}}, q1; q1 = move(q0); // The pointer to Point{1,2} is moved from q0 to q1 f2(q1); // f2 works directly on q1 via a const reference. std::cout << *q1 << std::endl; // (2,3) // point deleted (2,3) // point deleted (2,3) }