2008-12-24 139 views

回答

4

沒有。在C++中沒有這樣的「匿名對象」。定義一個類型爲A的對象會立即被丟棄;你寫的是一個表達式,它返回一個永遠不會分配給變量的A對象,就像printf的返回碼通常不會被分配或使用一樣。

在那段代碼中,如果它有效,你會聲明「no object」被分配到堆外部。由於沒有分配對象,所以沒有意義。

4

您可以創建一個「匿名」自動變量,但不是一個靜態變量。以下將創建類A的對象並調用構造函數,然後在函數出口調用析構函數。

class A; 
void foo() 
{ 
    A(); 
} 

你可以通過在預先分配的位置在堆上分配或constructing it in place對象得到類似的效果。

void foo() 
{ 
    new A(); 
} 

void foo() 
{ 
    static char memory[sizeof (A)]; 
    new (memory) A(); 
} 

但是,在這兩種情況下,都無法正確清理對象,因爲指針未被保留以供以後的刪除調用使用。即使靜態內存將被釋放,析構函數也不會被調用。匿名對象只有在與垃圾收集器一起使用時才真正使用。

3

不知何故,我認爲這個人的單身構造函數的副作用後。

無論如何,只是給了事物一個變量名已經。

+0

這就是爲什麼我發現自己在看這個問題(7年後)。我想創建一個具有全局作用域的對象,但我不希望它有一個名稱。它在其構造函數中註冊了一些其他對象,所以它不需要名稱。 – 2015-05-17 18:48:54

0

當然還有匿名的C++對象! A(100) is anonymous object在此示例中

但是,如果您考慮一下,則創建靜態匿名對象是沒有意義的。

相關問題