Динамическая переменная может инициализироваться следующими способами:
1.
class A {/* определение класса */};
A* pa = new A(); /*Какой-либо конструктор.*/
delete pa; /*Не забываем освободить память*/
Динамическим может быть не только объект:int* pi = new int(1);
cout << *pi;
delete pi;
2. placement new. Не выделяет память, а размещает объект в заранее определённом месте.
int i = 1;
int* j = new(&i) int(2); /*Разместили по томо же адресу, что и i.*/
cout << i << "\n"; /*Значение i затерто*/
3. nothrow new. В случае нехватки памяти, при вызове обычного new, им генерируется исключение std::bad_alloc. А new(nothrow) просто возвращает 0.
Пробежался по верхам, так как о new еще будут вопросы. А пока задам вопрос случайно заглянувшему читателю: бывает ли nothrow версия оператора placement new и почему?
Мы можем сделать своего рода менеджер памяти, который будет выделять нам необходимое количество памяти и возвращать указатель на нее. И там же предусмотреть эти исключения.
ОтветитьУдалить