2015-04-06 2 views
0

Я хотел знать, какая разница между этими двумя. Я ожидал, что оба они имеют такое же поведение, как заявление AПередача константы постоянной - * (new foo()) и foo() при передаче в качестве аргумента

void myfunctReference(foo& f) 
{ 
     std::cout << "Function called"; 
} 

Здесь находятся звонящие

утверждения А:

myfunctReference(foo()); //Fail - OK Agreed. Because a temp is being sent as a parameter to a function who parameter is not constant. temporaries can only bind to constant references 

оператор B:

myfunctReference(*(new foo())); //Allowed - Why ? isnt *(new foo()) a temp ? 
+0

'new foo()' возвращает временный указатель, который указывает на lvalue, обозначающий объект. – 0x499602D2

+0

новый выделяет память для объекта, и если вы не удалите его, он будет течь. Так что нет, это не временное, но вы не должны этого делать. – Dave

+0

Я знаю, что не должен был этого делать, я просто спрашиваю из любопытства –

ответ

4

Зачем ? isnt * (new foo()) temp?

Нет, это не «темп». Это выражение lvalue, ссылающееся на новый объект, объект, который жив, пока кто-то не называет delete. Совершенно нормально связывать ссылку с константой lvalue с таким выражением.

Это утечка памяти.

Смежные вопросы