2016-04-29 62 views
-2

如果我想在參數參數(C++)中創建一個對象的新實例,有沒有辦法在不使用「新」的情況下做到這一點。我的理解是,使用「新」關鍵字意味着我必須處理刪除對象(動態分配?)。在不使用「新」的情況下在參數參數中實例化對象

例子:

wrapper.set_state(new Medium()); 
+0

@icbytes更新了問題。 –

+0

'set_state'確實需要一個指針參數嗎?或者它只是「Medium」類型的參數? – ArchbishopOfBanterbury

回答

0

您可以創建堆棧(簡單的電話沒有新的顯式的)對象 - >但該方法返回後,對象將被「刪除」。

wrapper.set_state(Medium());

+0

我認爲C++有一種垃圾收集的形式。 –

+0

@MartinRand不是默認的非託管C++ – ArchbishopOfBanterbury

+0

@MartinRand C++沒有垃圾回收,但C++有一個對象生命週期的概念,您應該利用C++在這方面的行爲供您自己使用。這就是爲什麼它**有一定的行爲開始:它在那裏讓你的生活更輕鬆。儘管它沒有垃圾收集,但並不意味着它不管理資源。通過利用值的語義和各種引用,C++ 11使您能夠走得更遠。 –

2

只要set_state通過const引用取參數,可以在調用點構造一個臨時值:

void Wrapper::set_state(const & Medium) { ... } 

Wrapper wrapper; 
wrapper.set_state(Medium()); 

臨時的壽命將跨越set_state延伸。

否則,如果set_state需要一個指針(也許它不應該!),你需要保持實例調用的外部:

void Wrapper::set_state(Medium*) { ... } 

Wrapper wrapper; 
{ 
    // Local block to explicitly manage lifetime of `medium`. 
    Medium medium; 
    wrapper.set_state(&medium); 
} 
0

當您使用「新」你動態地創建和對象,那是對的。 當你使用「new」創建一個objet時,你將需要一個指向「hold」這個對象的指針,你將通過該指針訪問它。

在C++ 11中,您有智能指針。如果你使用智能點,你不需要擔心刪除對象。你可以在YouTube上找到很好的教程。搜索「Bo Quian」關於智能指針的教程。

如果你真的想創建並以這種方式反對,你可以嘗試創建一個函數爲你創建對象。

相關問題