C++ Primer 提倡多使用标准库,少使用指针,但是现代程序中还是不可避免的需要使用指针。
包含指针的类需要特别注意复制控制,因为复制指针时只是复制指针的值,即指针中的地址,而不会复制指针指向的对象;
这样会带来以下两种影响:
1. 多个类的对象中的指针是指针的同一块内存,存在一个修改,全部受影响的情况,容易造成程序的逻辑错误;
2. 很可能在某处删除了指针对象,而其他地方认为指针对象还存在,继续访问指针指向的对象,访问悬空指针的结果很随机,容易造成严重的运行时错误
C++采用以下三种方式之一来管理类中的指针成员:
1. 指针成员采取常规的指针行为, 这样的类具有指针的所有缺陷,包括上面说的两点;
2. 智能指针, 指针所指向的对象是恭喜的,但是可以防止悬垂指针的出现;
3. 类采取值型行为, 指针指向的对象是唯一的,由每个类对象独立管理
智能指针一般通过引用计数来防止悬垂指针,在下一篇里会详细介绍
定义值型类,是给指针提供值语义,即在类的复制控制中拷贝指针说指向的对象,而不是指针本身