翻翻make_unique<T>(arg1, arg2, ...)的内部实现就知道了
它的作用是用你传入的参数"arg1, arg2, ..."作为T的构造的参数,new出一个新的裸指针,然后构造一个unique_ptr<T>来拥有这个裸指针。
也就是说,它并不会拥有你传入的那个裸指针(这纯属对make_unique的误解)。
你的例子,内部执行的是unique_ptr<Object>(new Object(o))。
所以,Object需要实现构造Object::Object(const Object *p)才能编译通过,然并卵,o会leak。
--
修改:z16166 FROM 60.12.138.*
FROM 60.12.138.*