Это вопрос новичков, но я не делал С++ в течение длительного времени, поэтому здесь идет...
У меня есть класс, который содержит динамически выделенный массив, скажем
class A
{
int* myArray;
A()
{
myArray = 0;
}
A(int size)
{
myArray = new int[size];
}
~A()
{
// Note that as per MikeB helpful style critique, no need to check against 0.
delete [] myArray;
}
}
Но теперь я хочу создать динамически выделенный массив этих классов. Вот мой текущий код:
A* arrayOfAs = new A[5];
for (int i = 0; i < 5; ++i)
{
arrayOfAs[i] = A(3);
}
Но это ужасно взрывается. Поскольку новый объект A
, созданный (с вызовом A(3)
), разрушается, когда итерация цикла for
завершается, а это означает, что внутренний myArray
этого экземпляра A
получает delete []
-ed.
Итак, я думаю, что мой синтаксис должен быть ужасно неправильным? Я думаю, есть несколько исправлений, которые кажутся излишними, о которых я надеюсь избежать:
- Создание конструктора копирования для
A
. - Используя
vector<int>
иvector<A>
, поэтому мне не нужно беспокоиться обо всем этом. - Вместо того, чтобы
arrayOfAs
быть массивом объектовA
, будь то массив указателейA*
.
Я бы подумал, что это всего лишь новичок, где есть синтаксис, который фактически работает при попытке динамически распределять массив вещей, которые имеют внутреннее динамическое распределение.
(Кроме того, критику стиля оценили, поскольку это было некоторое время, так как я сделал С++.)
Обновление для будущих зрителей. Все ответы ниже очень полезны. Мартин принимается из-за кода примера и полезного "правила 4", но я действительно предлагаю прочитать их все. Некоторые из них являются хорошими, краткими утверждениями о том, что неправильно, и некоторые правильно указывают, как и почему vector
- хороший способ пойти.