我需要编写一个类,其构造函数采用对对象的常量引用并将其存储在本地。
为了避免我能预见的最常见错误,我只想接受对非临时性的引用(即:对左值的引用)。
我怎样才能编写一个函数,它只接受非临时的常量引用?
当然,即使是非临时引用也可能超出范围并因此破坏我的类行为,但我相信通过禁止临时引用我将避免大多数错误。
最佳答案
如果您要存储一个引用并需要在构造函数完成后使用它,构造函数最好采用一个指针:
struct C {
C(const X* p) : p_(p) { }
const X* p_;
};
这样,几乎可以保证您不会有指向临时对象的指针(除非 X
做了一些非常愚蠢的事情,比如重载一元 &
以返回这个
)。
如果构造函数采用指针,类的用户也更清楚他们需要注意传递给构造函数的 X
对象的生命周期。
关于C++:非临时 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542789/