据我所知,引用需要同时声明和初始化。
我猜,它的唯一用途在于传递参数,在某些情况下还包括多态性。
是否可以将引用保留为类中的数据成员?
如果是,我们什么时候需要呢?
请举个例子。
答案 0 :(得分:5)
当它是类的一个组成部分时,您将使用引用作为类成员,没有它,该类无法运行,并且您希望在多个类之间共享此部分或以多态方式使用它:
class Presenter
{
IView & view;
IModel & model;
Presenter(IView & view, IModel & model)
: view(view), model(model)
{
}
};
构造后不能更改引用成员,因此使用引用成员会强烈声明如何使用该类。使用常规或智能指针可提供更大的灵活性。
答案 1 :(得分:2)
你可以拥有引用类型数据成员,但作为一般规则,不应声明引用类型数据成员。具有引用类型数据成员的类是不可分配的(因为引用不可分配);这极大地限制了班级的使用。
使用指针类型的数据成员几乎总是更可取,因为它们有效地提供相同的功能,具有相同的生命周期约束,但不会使类不可分配。
答案 2 :(得分:0)
正如唐指出的那样,引用成员的使用方式与指针成员的使用方式大致相同。我认为值得指出的是,指针也可以为null并且也可以重新设置,因此在大多数方面都更有用。
另外,在现代C ++中,您可能不会使用指针或引用成员,因为您可以使用shared_ptr或unique_ptr来更好地封装成员的生命周期