	#include <memory>
	
	struct Foo {};
	class Bar {
	public:
		std::unique_ptr<Foo> m_f1; // we will own this
		std::unique_ptr<Foo> m_f2; // and this

		Bar(std::unique_ptr<Foo> f1) // caller must pass ownership
		    : m_f1(std::move(f1))    // assume ownership
		    , m_f2(std::make_unique<Foo>()) // create a new object
		{}

        ~Bar()
        {
            // nothing to do here
        }
	};
	
	int main() {
		auto f = std::make_unique<Foo>();
		Bar(std::move(f)); // the 'move' emphasizes that
		                   // we're giving you ownership
	    // 'f' is now invalid.
	
		return 0;
	}
