Есть класс CBase
,
class CBase
{
...
CBase &Create()
{
return *this;
}
...
}
Если я объявлю ссылку на lvalue и указатель,
CBase &kk = CBase().Create();
CBase *pp = &( CBase().Create() );
является kk
свисающая ссылка и pp
свисающий указатель?
Я думаю kk
а также pp
висят Потому что зовет CBase()
создает временный объект, без сомнения, производную, CBase().Create()
, должно быть тоже. Тем не менее, Xcode (версия 6.1) не выдает предупреждений или сообщений об ошибках.
Может кто-нибудь дать несколько советов или сказать мне, где документ C ++ 11 описывает эти поведения? Или я не прав?
Да, kk
это свисающая ссылка и pp
это висячий указатель. Временное производство CBase()
существует только на время полного выражения, в котором оно появляется. Обратите внимание, что указатель или ссылка на этот объект все еще действительны, если их время жизни также связано с выражением.
поскольку kk
а также pp
все еще существуют после полного выражения, это не так. С помощью kk
и разыменование pp
имеет неопределенное поведение.