某个时刻只能有一个unique_ptr指向一个给定对象,当unique_ptr被销毁时,他所指向的对象也会被销毁。
所以要注意,初始化unique_ptr必须采用直接初始化的形式,所以定义它时,可以采取绑定到一个new返回的指针上,例如:
unique_ptr<int> p1 //可以指向一个int的unique_ptr,此时默认值为nullptr
unique_ptr<int> p2(new int(21)) //指向一个值为21的int
由于一个unique_ptr拥有指向它的对象,因此unique_ptr不支持普通的拷贝或者复制操作:
unique_ptr<int> p2(p1) //错误
unique_ptr<int> p1 = p2 //错误
但是我们可以通过release和reset做到类似的功能:
unique_ptr<int> p2(p1.release()) //将p1中对象的所有权从p1转移到p2, p1置为空
unique_ptr<int> p3(new int(12))
p3.reset(p1.release()) //释放p3原来指向的内存并将p1的对象所有权转移到p3中