Является ли возврат ссылки на lvalue функции-члена временного объекта висячей ссылкой?

Есть класс 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 описывает эти поведения? Или я не прав?

1

Решение

Да, kk это свисающая ссылка и pp это висячий указатель. Временное производство CBase() существует только на время полного выражения, в котором оно появляется. Обратите внимание, что указатель или ссылка на этот объект все еще действительны, если их время жизни также связано с выражением.

поскольку kk а также pp все еще существуют после полного выражения, это не так. С помощью kk и разыменование pp имеет неопределенное поведение.

3

Другие решения


По вопросам рекламы [email protected]