2013-11-04 45 views
2

我有一個動態數組中刪除一個動態對象(在本示例中,SIZE = 2):從一個動態數組

polyTerm** polyn = new polyTerm* [SIZE]; 

我然後添加一些新ponlyTerm對象到陣列:

polyn[0] = new polyTerm(5.0,1); 
polyn[1] = new polyTerm(2.0,1); 

現在我想從槽0中刪除對象,並使指針爲空。我會如何去做這件事?我目前有:

delete &polyn[0]; 

然後我用:

polyn[0] = NULL; 

爲了使指針無效。

這項工作?

編輯: 糾正,我需要使用delete polyn[0] - 即使如此,設置爲NULL應該影響指針,因爲它仍然會在技術上指向對象的原始位置。將其重置爲NULL將刪除可能稍後彈出的任何錯誤。

+0

如果你使用'刪除[]',它會調用'polyTerm' –

+0

的析構函數,我意識到了這一點,但是這將刪除所有的對象,正確嗎?我只想刪除位置0中的對象。 –

+0

它對我來說很好看。它有什麼問題嗎? –

回答

2

您發佈的代碼是正確的。

單個對象的指針,polyn[0]使用非[]版本的new被創造了,所以必須使用非[]版本的delete被刪除 - 這是你在做什麼。

我仍然建議避免所有然而,並且使用vector <unique_ptr <polyTerm> >代替。那麼你所要做的就是erase無論你想要什麼元素,或者clear整個vector而不必擔心使用正確的類型和數量newdelete


我將演示使用shared_ptr而不是使用智能指針的vector這裏,巧妙地避免了缺乏make_unique(直到C++ 14)。

// Create array (vector) 
vector <shared_ptr <polyTerm>> polyn; 
// Populate array 
polyn.push_back (make_shared (5.0, 1)); 
polyn.push_back (make_shared (2,0, 1)); 
// Remove 0th element from array 
polyn.erase (polyn.begin()); 
+0

聽起來像它會工作,雖然我需要在這裏使用數組。只是好奇,你會介意我的例子,但用矢量,因爲我沒有經驗使用它們。謝謝! –

+0

@JeffB:這是一個演示。 –

+0

謝謝!只是意識到我真的需要使用數組,這是爲什麼:我正在做一個多項式程序,並且使用數組中的索引來表示指數。這是一個有點微妙,但有效和有效。使任何算法可以將多項式等等加起來,使其更容易和高效。 (也就是說,指數爲2的多項式將位於時隙2中) –