C ++: перезаписать элемент во вновь созданном массиве - PullRequest
2 голосов
/ 07 июля 2010

Если у меня есть массив, созданный так:

MyType *array = new MyType[10];

И я хочу перезаписать один из элементов, нужно ли сначала delete старый элемент, подобный этому:

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

Или это совершенно неправильно, и мне нужно работать с чем-то вроде «указатели на указатели», чтобы исправить эту работу? Если да, то как, пожалуйста ....

Спасибо

Ответы [ 4 ]

11 голосов
/ 07 июля 2010

Это массив значений , а не указателей. Так что вы просто сделали бы

array[5] = MyType();

Для поддержки оператора присваивания требуется MyType.


Между прочим, редко требуется ручное выделение массива, как это в C ++. Не используйте new и delete и используйте std::vector вместо:

std::vector<MyType> array(10);
array[5] = MyType();

Обратите внимание, что вам не нужно ничего удалять.

3 голосов
/ 07 июля 2010

Нет.

Отдельные элементы массива не были новыми, только сам массив был.

array[5] = MyType();   // note no  `new` here.
2 голосов
/ 07 июля 2010

Вы объявляете массив MyTypes, , а не указателей на MyTypes.Поскольку вы не new элементы в массиве, вы также не delete их.Вместо этого просто выполните:

array[5] = MyType();

Обратите внимание, что вы также можете использовать std::vector<MyType>, чтобы поместить MyTypes в кучу, не беспокоясь о неудобствах массивов C ++.

std::vector<MyType> myTypes(10);
myTypes[5] = MyType();
0 голосов
/ 07 июля 2010

Вы можете вызвать деструктор на месте, а затем использовать новое размещение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...