#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;
}
CSNpbmNsdWRlIDxtZW1vcnk+CgkKCXN0cnVjdCBGb28ge307CgljbGFzcyBCYXIgewoJcHVibGljOgoJCXN0ZDo6dW5pcXVlX3B0cjxGb28+IG1fZjE7IC8vIHdlIHdpbGwgb3duIHRoaXMKCQlzdGQ6OnVuaXF1ZV9wdHI8Rm9vPiBtX2YyOyAvLyBhbmQgdGhpcwoKCQlCYXIoc3RkOjp1bmlxdWVfcHRyPEZvbz4gZjEpIC8vIGNhbGxlciBtdXN0IHBhc3Mgb3duZXJzaGlwCgkJICAgIDogbV9mMShzdGQ6Om1vdmUoZjEpKSAgICAvLyBhc3N1bWUgb3duZXJzaGlwCgkJICAgICwgbV9mMihzdGQ6Om1ha2VfdW5pcXVlPEZvbz4oKSkgLy8gY3JlYXRlIGEgbmV3IG9iamVjdAoJCXt9CgogICAgICAgIH5CYXIoKQogICAgICAgIHsKICAgICAgICAgICAgLy8gbm90aGluZyB0byBkbyBoZXJlCiAgICAgICAgfQoJfTsKCQoJaW50IG1haW4oKSB7CgkJYXV0byBmID0gc3RkOjptYWtlX3VuaXF1ZTxGb28+KCk7CgkJQmFyKHN0ZDo6bW92ZShmKSk7IC8vIHRoZSAnbW92ZScgZW1waGFzaXplcyB0aGF0CgkJICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGdpdmluZyB5b3Ugb3duZXJzaGlwCgkgICAgLy8gJ2YnIGlzIG5vdyBpbnZhbGlkLgoJCgkJcmV0dXJuIDA7Cgl9Cg==