引用
引用是为对象起了另外一个名字,引用类型引用另外一种类型,一般变量在初始化时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此应用必须初始化
指针
指针与引用类似,也实现了对其他对象的间接访问
不同之处:
1,.指针本身就是一个UI想,允许对指针的赋值和拷贝,而且在指针的生命周期内它可以先后只想几个不同的对象
2.指针无须在定义时赋初值,在块作用域内定义的指针如果没有被初始化,会拥有一个不确定的值
智能指针和裸指针
我们通常使用get()函数向智能指针索要所指向对象的拥有权
auto p = make_shared<int>(42);
int* iPtr = p.get();
{
shared_ptr<int>(iPtr);
}
int value = *p; // Error! 内存已经被释放
p与iPtr指向了相同的内存,然而通过get方法后,将内存管理权转移给了普通指针。iPtr传递给里面程序块的临时智能指针后,引用计数为1,随后出了作用域,减少为0,释放内存。