2017-08-03 80 views
-5

比方說我們有這個..當你在同一個對象上使用「new」兩次會發生什麼?

class MyClass 
{ 
    int value; 

    void addIntToObject(int num) 
    { 
     value = num; 
    } 

} 


MyClass *object = new MyClass(); 
object->addIntToObject(1); 
object->addIntToObject(2); 

現在讓我們說我們這樣做一次...

object = new MyClass(); 

通過對同一對象使用新的兩倍,這是否意味着我們已經刪除了所有數據那存儲在對象中?有人可以向我解釋在同一物體上使用兩次新的確切工作方式嗎?

這是一種有效的釋放記憶的方法嗎? (如使用刪除和刪除[])

+0

到對象不要使用'new'和'delete'和原始指針在所有。 YAGNI。 – user0042

回答

6

你沒有「在同一個對象上重做兩次」。 new表達式創建一個對象。通過兩次做new,你完成了兩個完全獨立的對象。

變量object指針。它指向其他對象。指針上的=運算符意味着更改指針指向的對象。

因此,在您的代碼中有兩個對象,並且您將object(指針)更改爲指向第二個對象。第一個對象依然存在,但沒人知道它在哪裏,這就是所謂的內存泄漏

0

上=左側的東西是一個指針,即是簡單的,它可以包含一些內存位置adrress /對象實例

當你做新MyClass的() - >這條語句的每次執行將產生的MyClass的

新的實例/對象/內存所以,當你這樣做一次,

MyClass *object1 = new MyClass(); 
// here object1 now holds the address of object 
created by executing 'new MyClass()' suppose that address is 1 

現在再次創建一個對象,

object1 = new MyClass(); 
//here object1 now holds the address of object 
created by again executing 'new MyClass()' suppose that address is 2 

最後,兩個對象都保留在內存中,即1也是2.因此沒有東西被刪除。

指針(=的左側)首先指向與adrress 1.對象現在,將其指向與ADRESS 2.

相關問題