知识卡片

代理对象不是值

普通读书笔记卡 · 1391.b

内容

代理类模拟或增强另一类型的行为,本身却不一定保存独立的目标值。vector 的元素访问代理依赖底层容器,auto 保存代理可能延长句柄却没有延长数据寿命。遇到看似标量的返回值,应检查实际类型及所有者。

参考来源

- 位置:《Effective Modern C++》第2章《auto》,条款六: auto 推导若非己愿,使用显式类型初始化惯用法(源文件:_epub-src/EPUB/text/ch003.xhtml) - 结论依据:原文定义代理类并以位引用为例,说明接口表现和实际对象类型并不总相同。 - 原始内容:std::vector<bool>::reference 是一个代理类( proxy class )的例子:所谓代理类就是以模仿和增强一些类型的行为为目的而存在的类。很多情况下都会使用代理类, std::vector<bool>::reference 展示了对 std::vector<bool> 使用 operator[] 来实现引用 bit 这样的行为。另外,C++标准模板库中的智能指针(见 第4章 )也是用代理类实现了对原始指针的资…