是否可以在C ++中将引用保留为类成员?请举个例子

时间:2011-10-23 07:30:13

标签: c++ reference

据我所知,引用需要同时声明和初始化。

我猜,它的唯一用途在于传递参数,在某些情况下还包括多态性。

是否可以将引用保留为类中的数据成员?

如果是,我们什么时候需要呢?

请举个例子。

3 个答案:

答案 0 :(得分:5)

当它是类的一个组成部分时,您将使用引用作为类成员,没有它,该类无法运行,并且您希望在多个类之间共享此部分或以多态方式使用它:

class Presenter
{
    IView & view;
    IModel & model;

    Presenter(IView & view, IModel & model)
        : view(view), model(model)
    {
    }
};

构造后不能更改引用成员,因此使用引用成员会强烈声明如何使用该类。使用常规或智能指针可提供更大的灵活性。

答案 1 :(得分:2)

可以拥有引用类型数据成员,但作为一般规则,不应声明引用类型数据成员。具有引用类型数据成员的类是不可分配的(因为引用不可分配);这极大地限制了班级的使用。

使用指针类型的数据成员几乎总是更可取,因为它们有效地提供相同的功能,具有相同的生命周期约束,但不会使类不可分配。

答案 2 :(得分:0)

正如唐指出的那样,引用成员的使用方式与指针成员的使用方式大致相同。我认为值得指出的是,指针也可以为null并且也可以重新设置,因此在大多数方面都更有用。

另外,在现代C ++中,您可能不会使用指针或引用成员,因为您可以使用shared_ptrunique_ptr来更好地封装成员的生命周期