Я не понимаю исходных указателей достаточно хорошо и, к сожалению, я не разрешено использовать <vector>
s, поэтому я не могу понять, как написать параметризованный конструктор класса с массивом других объектов класса, его собственности.Как передать динамический массив объектов параметризованному конструктору другого класса?
class A{
...
};
class B{
int size;
A *arr;
...
B(int, const A *); // am I declaring this right?
}
...
B::B(int size_, const A *arr_) { // this is the constructor I'm trying to write
size = size_;
if (arr != nullptr) delete[] arr;
arr = new A[size];
memcpy(arr, arr_, sizeof(A) * size);
}
Как передать этот аргумент, не испортив память? Код выше не работает должным образом, поэтому я хотел бы услышать несколько советов. Мне не удалось найти решение Google, хотя мне кажется, что мой вопрос уже ответил, извиняюсь в этом случае.
Я не могу использовать сейф std::
. Мне нужно выяснить, как заставить его работать, используя выделение памяти вручную из C. Ой, я имею в виду C++, спасибо, что указали это.
Так вот конструктор, который работает для меня до сих пор:
B::B(int size_, const A *arr_) {
size = size_;
arr = new A[size_];
for (int i = 0; i < size; i++) arr[i] = arr_[i];
}
Спасибо за время каждого!
Вам необходимо предоставить полный тестовый пример. См. Здесь: http://stackoverflow.com/help/mcve. Недостаточно информации в коде, который вы указали, чтобы сообщить вам, что не так. – xaxxon
Вы можете использовать 'std: array'? –
'if (arr!= nullptr) delete [] arr; 'маловероятно, что вы хотите в своем конструкторе. На самом деле это просто неправильно. И использование 'memcpy' просто неверно, если вы не знаете, что' A' тривиально копируется. – jxh