我需要编写一个类,其构造函数对对象进行常量引用并将其存储在本地。
为了避免我可以预见的大多数常见错误,我只想接受对非临时错误的引用(即:引用左值)。
如何编写一个仅对非临时引用的常量引用的函数?
当然,即使非临时性也可能超出范围,从而打破了我的阶级行为,但我相信通过禁止临时引用,我将避免大多数错误。
答案 0 :(得分:18)
如果要存储引用并且需要在构造函数完成后使用它,那么构造函数最好采用指针:
struct C {
C(const X* p) : p_(p) { }
const X* p_;
};
这样,几乎可以保证你没有指向临时的指针(除非X
做了一些非常愚蠢的事情,比如重载一元&
以返回this
)
如果构造函数使用指针,那么对于类的用户来说,他们需要注意它们传递给构造函数的X
对象的生命周期也更清楚。