我有一個函數,我想將一些對象存儲到全局列表中。 這兩種方法都可以正常工作。但是他們是否都在堆上創建了一個變量? 他們之間有什麼區別?堆變量或不是| * new Object()||目的()?
vector.push_back(* new object());
vector.push_back(object());
TY求助
DrTosh
我有一個函數,我想將一些對象存儲到全局列表中。 這兩種方法都可以正常工作。但是他們是否都在堆上創建了一個變量? 他們之間有什麼區別?堆變量或不是| * new Object()||目的()?
vector.push_back(* new object());
vector.push_back(object());
TY求助
DrTosh
兩個存儲它們的載體,載體本身是免費的在如何想要存儲它們,但通常使用免費商店。
有一個很大的區別,但:
vector.push_back(* new object());
這種動態分配的object
對象,然後在矢量保存對象的副本,指針指向新分配object
然後立即銷燬。
這種方式導致內存泄漏,因爲您沒有delete
object
您已分配new
也不保存地址供以後使用。
vector.push_back(object());
這將創建一個臨時object
被複制並存儲在向量,然後銷燬,這是將對象添加到您的載體的「正確」的方式。
new object()
創建具有動態存儲持續時間匿名臨時變量。
* new object()
會給你一個可怕的內存泄漏,因爲你不指針從new object()
存儲,你只是解引用它,並將它傳遞給push_back
。
所以不要這樣做。
在另一方面,object()
是匿名臨時具有自動存儲持續時間。
它們類似於下面的代碼
object* temp = new object();
vector.push_back(*temp);
object temp;
vector.push_back(object);
它無關vector
,只是沒有delete
被稱爲(你不能)
爲什麼downvote? –
的可能的複製[爲什麼C++程序員應儘量減少'new'的使用](http://stackoverflow.com/questions/6500313/why-should-c-programmers-minimize-use-of-new) –
假設'vector'是一個' std :: vector