unique_ptr是一种定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权——两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。
如下图,定义p1为unique_ptr类型指针,如果把p1赋给p2,则编译出错;
如下图使用std::move方法进行了移动操作,之后p1成为无效指针,再运行到 str1.Format(_T("%d"), *p1) 这句就会产生0xC0000005错误;
void CmyweakView::OnDraw(CDC* pDC)
{
CmyweakDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CString str1;
std::unique_ptr<int>p1(new int(505));
//std::unique_ptr<int>p2 = p1;// 编译会出错
str1.Format(_T("%d"), *p1);
pDC->TextOutW(30, 30, str1);
std::unique_ptr<int>p3 = std::move(p1);// 转移所有权,那块内存归p3所有, p1成为无效的针.
str1.Format(_T("%d"), *p3);
pDC->TextOutW(30, 60, str1);
p3.reset();//释放内存.
p1.reset();//无效
}