C ++:非临时const引用

时间:2010-12-28 00:07:48

标签: c++ reference const temporary

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

为了避免我可以预见的大多数常见错误,我只想接受对非临时错误的引用(即:引用左值)。

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


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

1 个答案:

答案 0 :(得分:18)

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

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

    const X* p_;
};

这样,几乎可以保证你没有指向临时的指针(除非X做了一些非常愚蠢的事情,比如重载一元&以返回this

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