C ++:覆盖新创建的数组中的元素

时间:2010-07-07 13:45:49

标签: c++ arrays memory-management

如果我有一个像这样创建的数组:

MyType *array = new MyType[10];

我想要覆盖其中一个元素,我是否必须delete首先使用这样的旧元素:

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

或者这是完全错误的,我是否必须使用类似“指针指针”之类的东西来解决这个问题?如果是的话,请怎么样....

由于

4 个答案:

答案 0 :(得分:11)

这是的数组,而不是指针。所以你只是做

array[5] = MyType();

这需要MyType来支持赋值运算符。


顺便说一句,在C ++中很少需要这样的手动数组分配。取消使用newdelete并改为使用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。