unique_ptr所指的内存为自己独有,只能有一个unique_ptr指向一个指定的对象。不支持拷贝和赋值.
测试程序
void test()
{
unique_ptr<int> up1(new int(11));
cout << *up1 << endl;
std::unique_ptr<int> up3 = std::move(up1);//转移对象的所有权,转移之后,up1不再持有此内存
//up3将获得对象的所有权
cout << (up1==nullptr) << endl;//up1为空指针
cout << *up3 << endl;
up3.reset();//手动释放内存
up1.reset();//不会报错
std::cout << (up3 == nullptr) << endl;//up3为空指针
std::unique_ptr<int> up4(new int(22));
up4.reset(new int(44));//绑定对象
std::cout << *up4 << endl;
up4 = nullptr;//手动释放内存,与reset等价
unique_ptr<int> up5(new int(55));
int* p = up5.release();//释放对象所有权,内存没有释放
cout << *p << endl;
cout << (up5 == nullptr) << endl;//up5为空指针
delete p;//释放堆区内存
}
网友评论