Я пытаюсь реализовать класс массива, который может иметь динамический размер и будет выделять память без инициализации значений. Мой вопрос в отношении того, как я освободить память более поздней версии:Выделение и освобождение памяти C++
Могу ли я реализовать свой код в этом случае ?:
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;
}
}
ПРИМЕЧАНИЕ !!!! Я знаю, что это будет выделять память без инициализации каких-либо объектов типа. Это предполагаемое поведение моего кода. Кроме того, приведенный выше код не является моей полной реализацией, это только код, который будет выделять и освобождать память, потому что это то, что меня интересует с этим вопросом.
После дальнейших исследований я обнаружил, что я должен использовать malloc()
и free()
делать то, что я пытаюсь сделать. Спасибо всем ответам и комментариям.
Почему не 'память (новый тип [размер])'? – Holt
FWIW, почему бы и нет 'vector' или хотя бы изучить, как это работает и что он делает! Во втором примере вы никогда не строите бит 'Type', но вы уничтожаете' size' из них, что, безусловно, неверно. Кроме того, ваш синтаксис выделения выглядит странно, я бы ожидал 'новый char [некоторый размер здесь]'. –
Причина, по которой я не использую память (новый тип [размер]) или вектор, состоит в том, что оба экземпляра будут выделять память, а затем построить экземпляр для каждой позиции. В моем вопросе я указал, что я не хочу создавать экземпляры типа, а выделяю для него только память. –
Dynisious