如果我想在參數參數(C++)中創建一個對象的新實例,有沒有辦法在不使用「新」的情況下做到這一點。我的理解是,使用「新」關鍵字意味着我必須處理刪除對象(動態分配?)。在不使用「新」的情況下在參數參數中實例化對象
例子:
wrapper.set_state(new Medium());
如果我想在參數參數(C++)中創建一個對象的新實例,有沒有辦法在不使用「新」的情況下做到這一點。我的理解是,使用「新」關鍵字意味着我必須處理刪除對象(動態分配?)。在不使用「新」的情況下在參數參數中實例化對象
例子:
wrapper.set_state(new Medium());
您可以創建堆棧(簡單的電話沒有新的顯式的)對象 - >但該方法返回後,對象將被「刪除」。
wrapper.set_state(Medium());
我認爲C++有一種垃圾收集的形式。 –
@MartinRand不是默認的非託管C++ – ArchbishopOfBanterbury
@MartinRand C++沒有垃圾回收,但C++有一個對象生命週期的概念,您應該利用C++在這方面的行爲供您自己使用。這就是爲什麼它**有一定的行爲開始:它在那裏讓你的生活更輕鬆。儘管它沒有垃圾收集,但並不意味着它不管理資源。通過利用值的語義和各種引用,C++ 11使您能夠走得更遠。 –
只要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);
}
當您使用「新」你動態地創建和對象,那是對的。 當你使用「new」創建一個objet時,你將需要一個指向「hold」這個對象的指針,你將通過該指針訪問它。
在C++ 11中,您有智能指針。如果你使用智能點,你不需要擔心刪除對象。你可以在YouTube上找到很好的教程。搜索「Bo Quian」關於智能指針的教程。
如果你真的想創建並以這種方式反對,你可以嘗試創建一個函數爲你創建對象。
@icbytes更新了問題。 –
'set_state'確實需要一個指針參數嗎?或者它只是「Medium」類型的參數? – ArchbishopOfBanterbury