直接上代码,如下。
void UniquePtrTest2() {
using intup = unique_ptr<int>;
int ix = 1024, *pi = &ix, *pi2 = new int(2048);
intup p0(ix); // 错误,尝试将栈上的变量赋值给unique_ptr
{
intup p1(pi); // 错误,会尝试delete pi指向的栈上的变量ix
}
int value = ix;
intup p2(pi2);
{
intup p3(&ix); // 错误,ix为栈上的变量,同p1
}
intup p4( new int(2048)); // 正确
value = *p2;
{
intup p5(p2.get()); // 禁止,尝试将智能指针通过get返回的原始指针赋给另一个智能指针
}
value = *p2; // 错误, p2指向的内存已经被p5释放掉
return;
}
参考
C++ primer中文版 第五版 12章