如果我有这样创建数组: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