[英]What does (new Class())->Function(); mean?
我已經在MS一名員工的博客中看到此表格。 但是這是什么意思? 我很困惑,因為他在使用new運算符后沒有刪除 。 那是完全合法的嗎? 還是只能在Visual C ++中使用?
他博客的源代碼:
(new RegForm())->ShowMaximized();
GetApplication()->Run();
首先,對new
事物是合法的,而不是刪除它們。 這可能會導致內存泄漏,但是在C ++中是允許的。
在這段特定的代碼中, new
生成指向對象的指針。 您可以在指針上使用->
來調用對象的成員函數,因此這將創建RegForm,然后在其上調用ShowMaximized
。
我們無法通過此代碼判斷是否存在內存泄漏。 但是RegForm可能正在使用一種自注冊模式。 例如,其構造函數可能包含:
GlobalListOfObjectsToDeleteLater.push_back(this);
當應用程序關閉時,另一段代碼將通過列表刪除所有內容。
實際上,RegForm似乎在GUI的其他部分進行了注冊,因此必須這樣做才能顯示出來。
完全一樣
RegForm* pForm = new RegForm();
pForm->ShowMaximized();
沒有嚴格的規則要求在程序結束前刪除所有new
s。 程序員應該知道自己的工作,並避免內存泄漏(特別是在重復性任務中)。 順便說一句,當應用程序exit
時,所有內存將被清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.