2015-04-06 71 views
0

我想知道這兩者之間有什麼不同。我期待他們兩人有相同的行爲語句中的將一個非常量傳遞給一個常量 - *(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()'返回一個指向指定對象的左值的臨時指針。 – 0x499602D2

+0

new爲對象分配內存,除非你刪除它,否則會泄漏。所以不,這不是暫時的,但你不能這樣做。 – Dave

+0

我知道我不應該這樣做,我只是出於好奇而問。 –

回答

4

爲什麼? isnt *(new foo())是一個臨時?

不,它不是「臨時」。這是一個左值表達,指的是新對象,它是一個活着的對象,直到有人呼叫delete爲止。將非const的左值引用綁定到這樣的表達式是非常好的。

它是什麼是內存泄漏。