Я уже знаю, что оператор new[]
сначала выделяет память, а затем вызывает конструктор для каждого элемента и что оператор delete[]
сначала вызывает деструктор для каждого элемента, а затем освобождает память, и из-за этого они оба имеют сложность времени O (n).
Но если у меня есть класс, для которого я не определил никакого конструктора/деструктора, будет ли еще сложна сложность O (n), или это будет просто O (1)?
Например, если у меня есть два класса:
class foo
{
public:
int a;
foo()
{
a = 0;
// more stuff
}
~foo()
{
a = 1;
// some useful stuff here
}
};
class boo
{
public:
int a;
};
И я создаю два массива из них следующим образом:
int n = 1000;
foo* pfoo = new foo[n];
boo* pboo = new boo[n];
Я уверен, что первый вызов new
будет иметь сложность O (n), но как насчет второй? Будет ли new
просто выделить нужную память и что она или вызовет какой-то конструктор по умолчанию (я не уверен, что такая вещь действительно выходит на С++) для каждого элемента?
И тот же вопрос для delete
:
delete [] pfoo;
delete [] pboo;
Когда я удаляю второй массив, все еще будет сложность O (n) или будет delete
просто освободить память в O (1) сложности?