new coral::PropertyManager
new coral::PropertyManager
在堆上分配一個新的PropertyManager,但是因爲它是一個臨時變量,您永遠不會釋放它。這是標準的Java成語,因爲Java是一種垃圾收集語言,GC將負責爲您發佈這個懸而未決的參考。
如果你想在這裏使用new
出於某種原因,正確的方式做這將是如下:
auto *pm = new coral::PropertyManager; // auto is C++11 syntax
m_propertyManager(pm);
delete pm; // when you're done using it
你的第二個選擇是正確的,因爲它分配Mgr
上的自動變量堆棧,當函數退出時它將被釋放。 m_propertyManager(&Mgr);
將Mgr的地址傳遞給該函數,該函數將允許它修改Mgr對象(儘管這可能通過將Mgr作爲參考進行更好地完成)。
請注意,如果m_propertyManager是在當前作用域退出後仍然存在的對象,並且它在某處存儲對Mgr的引用,那麼當您退出當前作用域並且Mgr對象被銷燬時,您會發現m_propertyManager持有引用無效的記憶。
更好的辦法是使用的std ::類似的unique_ptr m_propertyManager(標準::的unique_ptr(新珊瑚:: PropertyManager中)); – mgr
@mgr:我可能弄錯了,但不是這樣,你不能將一個唯一指針的副本傳遞給一個函數嗎?在這個用例中std :: shared_ptr是不明智的選擇,糾正我的錯誤。 – Skalli
是的你是對的,這裏需要一個共享指針。 – mgr