重定向unique_ptr会发生什么?

Tra*_*cer 4 c++ unique-ptr c++11

我理解这unique_ptr是某个对象的单个所有者,当它超出范围时,它会释放该对象.我不明白的是以下情况:

unique_ptr<int> p(new int(1));
p = unique_ptr<int>(new int(2));
Run Code Online (Sandbox Code Playgroud)

第一个对象new int(1)如果p被重定向到另一个内存位置会发生什么new int(2)(因为它p只能拥有其中一个)?

Jon*_*rdy 7

unique_ptr当它unique_ptr被摧毁或重新安置时,它会破坏它所拥有的物体.例如:

#include <iostream>
#include <memory>
using namespace std;

struct T {
    T(int x) : x(x) {
        cout << "T(" << x << ")\n";
    }
    ~T() {
        cout << "~T(" << x << ")\n";
    }
    int x;
};

int main() {
    unique_ptr<T> p(new T(1));
    p = unique_ptr<T>(new T(2));
}
Run Code Online (Sandbox Code Playgroud)

这将打印:

  • T(1) 何时创建第一个对象.
  • T(2) 何时创建第二个对象.
  • ~T(1)当第一个对象被赋值运算符释放时p.
  • ~T(2)当第二个对象被析构函数释放时p.