воскресенье, 23 января 2011 г.

41. Как проинициализировать динамическую переменную?

С помощью оператора new, а также его разновидностей.

Динамическая переменная может инициализироваться следующими способами:
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 и почему?

1 комментарий:

  1. Мы можем сделать своего рода менеджер памяти, который будет выделять нам необходимое количество памяти и возвращать указатель на нее. И там же предусмотреть эти исключения.

    ОтветитьУдалить

Можно использовать теги <b>, <i>