2010-07-07 87 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();