C++ 什么';在C+中有一个参考成员是错误的+;?

C++ 什么';在C+中有一个参考成员是错误的+;?,c++,C++,在阅读“C++编码标准:101规则、指南和最佳实践”时,我遇到了以下问题: 请注意,使用引用或auto_ptr成员几乎总是错误的 然而,本文没有详细说明为什么这应该是错误的。那么,拥有一个包含引用成员的类有什么不对呢?一个问题可能是引用是不可变的,一旦设置了引用,它们就无法更改。。另一个问题可能是悬空引用,其中您有一个对现在已销毁对象的引用。我认为本文是在告诉您避免在类中嵌入任何不受该类控制的内容。引用和自动指针可能引用已删除的对象。引用成员永远不能更改,从而使类不可赋值。const对象类型的成

在阅读“C++编码标准:101规则、指南和最佳实践”时,我遇到了以下问题:

请注意,使用引用或
auto_ptr
成员几乎总是错误的


然而,本文没有详细说明为什么这应该是错误的。那么,拥有一个包含引用成员的类有什么不对呢?

一个问题可能是引用是不可变的,一旦设置了引用,它们就无法更改。。另一个问题可能是悬空引用,其中您有一个对现在已销毁对象的引用。

我认为本文是在告诉您避免在类中嵌入任何不受该类控制的内容。引用和自动指针可能引用已删除的对象。

引用成员永远不能更改,从而使类不可赋值。
const
对象类型的成员也是如此。此外,最佳做法是将任何无效引用设置为
nullptr
,但不能应用

只需使用指针即可。对于裸指针确实不起作用的情况,还有
std::reference_wrapper


auto_ptr
早已过时且不受欢迎,因此不应该出现这种情况。它的复制语义不可靠。

使用
unique\u ptr
shared\u ptr
时,在任何上下文中使用
auto\u ptr
都是错误的。在其他
\u ptr
标准化之前,它已经够狡猾的了,现在已经被弃用了。当然,这本书早在它们出现之前就已经写好了。如果引用是错误的,那么一定是不可变(原始)指针。为什么没有提到?如果你有一个指针/引用作为成员,这意味着你的对象的状态依赖于它的控制之外的状态。有时你需要这个,但是我建议你总是接受构造函数中的依赖关系,这样你就可以用它来模拟它。这就是为什么要简单地通过一个菜单的列表来“成为一个有生产力的C++程序员”的好例子。至少了解一点这种语言并做出自己的决定是没有办法的。通常C++希望是基于价值的,对象应该存在并且与上下文无关。但这种想法有局限性,有时您确实需要一个类来依赖一些上下文(生命周期)保证,当您需要时,您真的需要它。这不应该是默认的方法,但也不是一般的错误。这要看情况而定。