2010-07-07 88 views
2

如果我有這樣創建數組:C++:在新創建的數組覆蓋的元素

MyType *array = new MyType[10]; 

而且我希望覆蓋的要素之一,我必須delete第一像舊元素這樣的:

delete &array[5]; 
array[5] = *(new MyType()); 

或者,這是完全錯誤的,我有類似「指針的指針」,以解決這一問題工作的工作?如果是這樣,怎麼請....

感謝

回答

11

這是數組的指針不,。所以你只要做

array[5] = MyType(); 

這需要MyType來支持賦值運算符。


順便提及,有很少需要在C++手冊數組分配這樣的。破除與newdelete,並使用std::vector代替:

std::vector<MyType> array(10); 
array[5] = MyType(); 

注意,沒有必要刪除任何內容。

+2

+1推薦std :: vector。不能這樣做似乎:) – rubenvb 2010-07-07 14:12:55

3

該陣列的各個元件號未new'd,只是陣列本身。

array[5] = MyType(); // note no `new` here. 
+0

+1:謝謝。這就是我的想法。 – 2010-07-07 14:06:04

0

您可以在原地調用析構函數,然後使用放置新函數。

+5

是的,你可以。不過,這是一項先進的技術,並且考慮到這個問題非常基本,這可能不是他應該做的。 – Thomas 2010-07-07 13:53:38

+0

@Thomas:是的,但是這個解決方案不需要一個好的賦值操作符。 – sharptooth 2010-07-07 13:55:38

+0

@Thomas:哈哈!確實是的。這個問題很基本......但是我正在混合使用'新T'和一個簡單的'new' – 2010-07-07 13:57:11

2

您正在聲明的陣列MyTypes,而不是指向MyTypes的指針。因爲你沒有new這個數組中的元素,所以你也沒有delete他們。相反,只是做:

array[5] = MyType(); 

請注意,您還可以使用std::vector<MyType>把你MyTypes堆上,而不必擔心C++數組的滋擾。

std::vector<MyType> myTypes(10); 
myTypes[5] = MyType();