11

我需要编写一个类,它的构造函数接受一个对象的常量引用并将其存储在本地。

为了避免我能预见的最常见的错误,我只想接受对非临时性的引用(即:对左值的引用)。

如何编写一个仅对非临时对象进行常量引用的函数?


当然,即使是非临时的也可能超出范围,从而破坏我的课堂行为,但我相信通过禁止临时引用,我将避免大多数错误。

4

1 回答 1

18

如果您要存储引用并需要在构造函数完成后使用它,那么构造函数最好使用指针:

struct C {
    C(const X* p) : p_(p) { }

    const X* p_;
};

这样,几乎可以保证您不会有指向临时对象的指针(除非X做一些非常愚蠢的事情,比如重载一元&以返回this)。

如果构造函数采用指针,类的用户也更清楚他们需要注意X传递给构造函数的对象的生命周期。

于 2010-12-28T00:12:47.790 回答