有一个班级CBase
。
class CBase
{
...
CBase &Create()
{
return *this;
}
...
}
如果我声明一个左值引用和一个指针,
CBase &kk = CBase().Create();
CBase *pp = &( CBase().Create() );
是kk
悬空参考,是pp
悬挂指针吗?
我认为kk
和pp
悬而未决。因为毫无疑问,调用CBase()
会创建一个临时对象,导数CBase().Create()
也应该是。但是,Xcode(版本6.1)不提供警告或错误消息。
任何人都可以提供一些提示或告诉我C ++ 11文档描述这些行为的位置吗?或者我错了吗?
答案 0 :(得分:3)
是的,kk
是一个悬空参考,而pp
是一个悬空指针。由CBase()
生成的临时表仅在其出现的完整表达式的持续时间内存在。请注意,指针或引用引用此对象仍然有效,只要它们的生命周期也绑定到表达式。
由于kk
和pp
在完整表达后仍然存在,因此情况并非如此。使用kk
和解除引用pp
具有未定义的行为。