C++:對象可以被更早地銷燬,以使其存儲內存被後續對象重用嗎?對象是否可以被更早的銷燬,以使其存儲內存可以被後續對象重用?
在C++代碼一個段,在所述第一半部分,一個對象,使用B; 在下半部分,創建和使用對象c,d。
由於物體A,B佔用大量的內存,我想手動銷燬對象A,B上半年部分結束的時候。
我知道我可以使用新的,刪除去實現它。
但是,如果我不使用新的,但還是要銷燬對象較早(這意味着,範圍的結束時間之前),我可以手動調用析構函數摧毀它?所以這部分內存可以重用於對象c和d。 (我不需要來釋放內存,因爲重用是罰款
下面是一個僞代碼:。
monsterClass a, b;
dragonClass c, d;
int i,j,k,l;
a = monsterClass(1000, 2000);
b = monsterClass(2000, 3000);
i = processMethod1(a, b);
j = ...;
k = ...;
l = ...;
// here, I want to destroy a, b, since they are not used any more, while occupy memory.
// The above half part and the below half part use many common variables.
// So it seems scope {} method makes it inconvenient,
// since I don't want to create a function with too many parameters.
// I don't want to use new or delete here. I hope it looks simple and not prone to error
// So can I use: ~a, ~b here?
c = dragonClass(400, 3000);
d = dragonClass(500, 4000);
processMethod2(c, d, i);
j = ...;
k = ...;
l = ...;
[更新1]所以,大多數人建議使用範圍,這是一個很好的方式 我還是很好奇,我可以使用〜a和〜b嗎? 我覺得這似乎是一種可行和方便的方式。
[Update 2]我想到了另一種情況,在這種情況下,不同變量的作用域是交織在一起的!就像這樣:a的範圍有b的作用域的重疊,但它們不包括關係。它是部分重疊的關係。 在這種情況下,這是否意味着使用範圍是不可能的? 最後的手段是使用新的和刪除,對吧?
請添加代碼的例子來解釋爲什麼你必須銷燬對象_before scope_其結束的時間。你總是可以添加額外的'{}'來定義更小的範圍。 – timrau 2014-12-05 17:03:07
[您可以手動調用原始對象的析構函數,然後使用放置'new'在該內存之上創建一個新對象](http://stackoverflow.com/questions/2494471/c-is-it-可能對呼叫一個構造函數 - 直沒有新)。如果你這樣做,清楚地記錄事情,因爲它可能會嚴重混淆/誤導代碼的讀者。 – Cornstalks 2014-12-05 17:04:16
你能否將這兩個部分作爲單獨的功能實現?或在一個函數內單獨的塊?這比手動控制要簡單得多(儘管如果你真的需要的話,這在某種程度上是可能的)。 – 2014-12-05 17:09:01