std::unique_ptr 可以用来获取指针指向位置的实际地址,但是如果在 reset() 之前被暂存起来了,那么 reset() 之后便不会影响存起来的那个值,如果认为 reset() 会影响之前暂存的值,则会导致dangling pointer 访问,从而触发段错误,demo如下:
#include#include #include int main(int agrc,char** agrv) { int * r_p_i; std::unique_ptr p_i = std::make_unique (1); r_p_i = p_i.get(); printf("r_p_i -> %pn",r_p_i); if(r_p_i == NULL){ std::cout << "1 . r_p_i == NULL" << std::endl; } p_i.release(); printf("p_i -> %pn",p_i.get()); printf("r_p_i -> %pn",r_p_i); if(p_i.get() == NULL){ std::cout << "1 . p_i == NULL" << std::endl; }else{ std::cout << "1 . p_i != NULL" << std::endl; printf("p_i -> %pn",p_i.get()); } if(r_p_i == NULL){ std::cout << "2 . r_p_i == NULL" << std::endl; }else{ std::cout << "2 . r_p_i != NULL" << std::endl; printf("r_p_i -> %pn",r_p_i); } }


![[modern c++] std::unique [modern c++] std::unique](http://www.mshxw.com/aiimages/31/938312.png)
