偶尔,对于稍纵即逝的时刻,我认为 auto_ptr 很酷。但大多数时候,我认识到有更简单的技术使它变得无关紧要。例如,如果我想自动释放一个对象,即使抛出异常,我也可以新建对象并分配给 auto_ptr。很酷!但是我可以更轻松地将我的对象创建为局部变量,并让堆栈来处理它(呃!)。
因此,当我发现google C++ 编码标准禁止使用 auto_ptr 时,我并没有太惊讶。谷歌声明应该使用 scoped_ptr (如果需要智能指针)。
我想知道是否有人,与我的经验相反,可以给出一个充分的理由说明 auto_ptr 何时是最好或最简单的使用方法。如果没有,那么我想我会禁止自己使用它(跟随谷歌的领导)。
更新:对于那些表示担忧的人,不,我没有采用谷歌标准。例如,根据谷歌的建议,我同意应该激活异常处理。我也喜欢使用预处理器宏,例如我制作的可打印枚举。让我印象深刻的只是 auto_ptr 主题。
update2:原来我的回答来自下面的两个响应者,以及来自 Wikipedia 的注释。首先,Herb Sutter 确实展示了一个有效的用途(源-汇成语和生命周期关联的对象组合)。其次,有些商店 TR1 和 boost 不可用或被禁止,只允许使用 C++03。第三,根据 Wikipedia,C++0x 规范正在弃用 auto_ptr 并将其替换为 unique_ptr。所以我的答案是:如果我可以使用 unique_ptr(在所有考虑的平台上),则使用 auto_ptr 用于 Sutter 描述的情况。