В C++
, каждый раз, когда используется new []
или delete []
, сколько раз каждый выделяет или освобождает память?Мой вопрос более специфичен для использования их в классах с их соответствующими конструкторами и деструктором.
Например, возьмем следующий класс:
#include <iostream>
class Cell
{
public:
Cell() : _value(2)
{
std::cout << "Cell being made!\n";
}
~Cell()
{
std::cout << "Cell being freed!\n";
}
const int& getVal() const
{
return _value;
}
private:
int _value;
};
Теперь, скажем, массив этого типа классанеобходимо, и используется new[]
, как показано ниже
Cell* cells = new Cell[5];
Когда это выполняется в исполняемом файле или программе, я также вижу следующее, напечатанное на стандартный вывод:
Cell being made!
Cell being made!
Cell being made!
Cell being made!
Cell being made!
И впоследствиикогда delete[]
вызывается для указателя cells
, я вижу:
Cell being freed!
Cell being freed!
Cell being freed!
Cell being freed!
Cell being freed!
Мой вопрос в том, что при каждом вызове конструктора размер памяти равен одному выделяемому экземпляру класса?Например, new Cell[5]
выделяет память 5 раз?Или он выделяет один раз, а затем делает 5 вызовов для конструктора как просто вызов функции?То же самое с delete[]
, освобождает ли он при каждом вызове деструктора?