如果我有這樣創建數組:C++:在新創建的數組覆蓋的元素
MyType *array = new MyType[10];
而且我希望覆蓋的要素之一,我必須delete
第一像舊元素這樣的:
delete &array[5];
array[5] = *(new MyType());
或者,這是完全錯誤的,我有類似「指針的指針」,以解決這一問題工作的工作?如果是這樣,怎麼請....
感謝
如果我有這樣創建數組:C++:在新創建的數組覆蓋的元素
MyType *array = new MyType[10];
而且我希望覆蓋的要素之一,我必須delete
第一像舊元素這樣的:
delete &array[5];
array[5] = *(new MyType());
或者,這是完全錯誤的,我有類似「指針的指針」,以解決這一問題工作的工作?如果是這樣,怎麼請....
感謝
這是值數組的指針不,。所以你只要做
array[5] = MyType();
這需要MyType
來支持賦值運算符。
順便提及,有很少需要在C++手冊數組分配這樣的。破除與new
和delete
,並使用std::vector
代替:
std::vector<MyType> array(10);
array[5] = MyType();
注意,沒有必要刪除任何內容。
該陣列的各個元件號未new'd,只是陣列本身。
array[5] = MyType(); // note no `new` here.
+1:謝謝。這就是我的想法。 – 2010-07-07 14:06:04
您可以在原地調用析構函數,然後使用放置新函數。
是的,你可以。不過,這是一項先進的技術,並且考慮到這個問題非常基本,這可能不是他應該做的。 – Thomas 2010-07-07 13:53:38
@Thomas:是的,但是這個解決方案不需要一個好的賦值操作符。 – sharptooth 2010-07-07 13:55:38
@Thomas:哈哈!確實是的。這個問題很基本......但是我正在混合使用'新T'和一個簡單的'new' – 2010-07-07 13:57:11
您正在聲明的陣列MyTypes
,而不是指向MyTypes
的指針。因爲你沒有new
這個數組中的元素,所以你也沒有delete
他們。相反,只是做:
array[5] = MyType();
請注意,您還可以使用std::vector<MyType>
把你MyTypes
堆上,而不必擔心C++數組的滋擾。
std::vector<MyType> myTypes(10);
myTypes[5] = MyType();
+1推薦std :: vector。不能這樣做似乎:) – rubenvb 2010-07-07 14:12:55