Я пытаюсь реализовать класс массива, который может иметь динамический размер, и он будет выделять память без инициализации значений. Мой вопрос касается того, как я освобождаю память позже:
Могу ли я реализовать свой код таким образом?:
template<typename Type>
class Array {
Type *values;
Array(int size) : values(new (size * sizeof(Type)) char()) {}
~Array() {
delete[] values;
}
}
Или мне нужно что-то вроде этого?:
template<typename Type>
class Array {
Type *values;
void *memory;
Array(int size) : memory(new (size * sizeof(Type)) char()), values(memory), size(size) {}
~Array() {
delete[] memory;
}
}
ПРИМЕЧАНИЕ!!!! Я знаю, что это будет выделять память без инициализации каких-либо объектов Type. Это предполагаемое поведение моего кода. Кроме того, приведенный выше код не является моей полной реализацией, это только код, который будет выделять и освобождать память, потому что это то, что меня интересует в этом вопросе.
После дальнейших исследований я обнаружил, что должен использовать malloc()
и free()
, чтобы делать то, что я пытаюсь сделать. Спасибо всем ответившим и комментирующим.
memory(new Type[size])
? - person Holt   schedule 17.02.2016vector<Type>
или хотя бы изучить, как это работает и что делает! Во втором примере вы никогда не создаетеType
, но уничтожаетеsize
из них, что, безусловно, неверно. Кроме того, ваш синтаксис распределения выглядит странно, я бы ожидалnew char[some size here]
. - person Ulrich Eckhardt   schedule 17.02.2016new char[42]
иnew char[42]()
. - person Fiktik   schedule 17.02.2016