Он четко определен; вы создаете массив, передавая действительный указатель на конструктор (который принимает указатель, несмотря на то, что выглядит так, как будто он принимает массив), сохраняя этот указатель, а затем получая доступ к допустимому элементу массива через него.
Единственная проблема - утечка памяти - вы никогда не удаляете массив.
UPDATE Теперь вы добавили деструктор для удаления массива, класс очень опасен - если вы его скопируете, то обе копии попытаются удалить тот же массив. То, что будет, вызывает неопределенное поведение. Вам необходимо либо предотвратить копирование, либо реализовать его правильно, за Rule of Three. Вы также получите неопределенное поведение, если указатель не является массивом, созданным с помощью new[]
.
После того, как вы научились управлять ресурсами вручную, и насколько сложно получить все правильные сведения, вы обычно будете использовать класс библиотеки, чтобы сделать это за вас. В этом случае std::vector<int>
будет идеальным. Выполнение этого иногда называют «Правилом нуля» (как упоминалось в комментариях), поскольку оно устраняет необходимость писать собственный деструктор или копировать/перемещать семантику вообще - все они происходят из класса (ов), который вы используете , который кто-то уже выполнил правильно.
Если вы не 'delete [] elem;' в деструкторе, вы просачиваете память – billz
Какое у вас поведение? Также как замечено выше, вы должны добавить деструктор – user2533527
Где неопределенное поведение? – Montaldo