NO.
arr2 = arr1;
Не делает то, что, как вы думаете, делает!
В STL уже есть что-то для этого, оно называется vector
.
Ради полноты ..:)
arr2
до присвоения занимал адрес, если в начале массива из 10 элементов вы выделены. После назначения вместо копирования содержимого блока, адресуемого arr1
(что, как я полагаю, вы хотели сделать), назначение просто меняет адрес, который arr2
содержит, на адрес, который arr1
имеет место (то есть начало массива из 5 элементов), для остального кода это имеет два последствия:
- У вас больше нет адреса блока из 10 выделенных вами элементов, поэтому у вас нет возможности освободить этот блок - следовательно, у вас утечка памяти (если ваша программа продолжит работать)
- Хотя изначально вы выделили 10 элементов для
arr2
, в соответствии с заданием вы теперь обращаетесь к блоку, который имеет только 5 элементов, и доступ к чему-либо за пределами этого блока из 5 (т. Е. Индексов 5 и более), вероятно, закончится в носовых демонах, посещающих с очень большой крикетной битой - или вам повезет ...
Итак, что вы можете сделать:
- Используйте
std::vector<int>
, один из его конструктивных особенностей - избавиться от этого вида бремени.
от вас (если вы не заинтересованы в реализации другого контейнера), если это так
- Используйте операцию копирования для правильного копирования содержимого, а не присваивайте адреса, как предложено, используйте
std::copy
- или другие, например memcpy
(предпочитайте memmove
- это немного медленнее, но хорошо определено для перекрытия блоки и т. д.)