练习12.16:
试图拷贝和赋值:
#include <iostream>
#include <string>
using namespace std;
#include <vector>
int main()
{
unique_ptr<string>p1(new string("Stegosaurus"));
unique_ptr<string>p2(p1);
unique_ptr<string>p3;
p3 = p2;
system("pause");
return 0;
}
编译器错误:
编译器将拷贝函数和赋值函数声明为已删除的函数,防止我们进行拷贝和删除
练习12.17:
(a):不合法,ix不是指针,不能初始化unique_ptr
(b):合法,但pi指向局部变量,超过作用域会被销毁,该行为可能是未定义的
(c):合法,pi2指向堆区的int,可以用来初始化
(d):合法,存在问题,与(b)一样
(e):合法,显示初始化
(f):不合法,会有两个独立的unique_ptr指向同一个内存块,其中一个指针释放内存会导致另一个指针变为空悬指针
练习12.18:
shared_ptr允许多个智能指针共享同一对象,引用计数为0时自动释放内存,且shared_ptr支持拷贝和赋值,不需要release成员来改变指向