如果我有一个像这样创建的数组:
MyType *array = new MyType[10];
我想要覆盖其中一个元素,我是否必须delete
首先使用这样的旧元素:
delete &array[5];
array[5] = *(new MyType());
或者这是完全错误的,我是否必须使用类似“指针指针”之类的东西来解决这个问题?如果是的话,请怎么样....
由于
答案 0 :(得分:11)
这是值的数组,而不是指针。所以你只是做
array[5] = MyType();
这需要MyType
来支持赋值运算符。
顺便说一句,在C ++中很少需要这样的手动数组分配。取消使用new
和delete
并改为使用std::vector
:
std::vector<MyType> array(10);
array[5] = MyType();
注意,不需要删除任何内容。
答案 1 :(得分:3)
没有
数组的各个元素并不是新的,只是数组本身就是。
array[5] = MyType(); // note no `new` here.
答案 2 :(得分:2)
您正在声明一个MyTypes
,不是指向MyTypes
的数组。因为您没有new
数组中的元素,所以您也不会delete
它们。相反,只需:
array[5] = MyType();
请注意,您还可以使用std::vector<MyType>
将MyTypes
放在堆上,而不必担心C ++数组的麻烦。
std::vector<MyType> myTypes(10);
myTypes[5] = MyType();
答案 3 :(得分:0)
您可以就地调用析构函数,然后使用placement new。