Чтение онлайн

на главную - закладки

Жанры

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

Для массивов объектов типа класс используются глобальные функции operator new и operator delete (§R.5.3.3, §R.5.3.4).

Поскольку функции X::operator new и X::operator delete статические, они не могут быть виртуальными. Функция operator delete, которая вызывается из деструктора для освобождения памяти, выбирается по обычным правилам областей видимости, например:

struct B {

 virtual ~B;

 void* operator new(size_t);

 void operator delete(void*);

};

struct D: B {

 ~D;

 void* operator new(size_t);

 void operator delete(void*);

};

void f

{

 B* p = new D;

 delete p;

}

В

этом примере память для объекта класса D выделяется с помощью D::operator new, а благодаря наличию виртуального деструктора, освобождается с помощью D::operator delete.

R.12.6 Инициализация

Объект класса без конструкторов, без частных или защищенных членов, без виртуальных функций и без базовых классов можно инициализировать с помощью списка инициализаторов (§R.8.4.1). Объект класса с конструктором должен инициализироваться или иметь стандартный конструктор (§R.12.1). Стандартный конструктор используется для объектов, которые не проходят явной инициализации.

R.12.6.1 Явная инициализация

Объекты классов с конструкторами (§R.12.1) можно инициализировать списком выражений, заключенным в скобки. Этот список считается списком фактических параметров для вызова конструктора, производящего инициализацию. Иначе, в качестве инициализатора задается с помощью операции = одно значение. Оно используется как фактический параметр для конструктора копирования. Обычно можно обойтись без вызова конструктора копирования, например:

class complex {

 //…

public:

 complex;

 complex(double);

 complex(double,double);

 //…

};

complex sqrt(complex,complex);

complex a(1); // инициализация вызовом

// complex(double)

complex b = a; // инициализация копированием `a'

complex c = complex(1,2); // конструктор complex(1,2)

// вызывается complex(double,double)

//
и копируется в `c'

complex d = sqrt(b,c); // вызывается sqrt(complex,complex),

// результат копируется в `d'

complex e; // инициализация вызовом конструктора

complex f = 3; // complex(3), вызывается

// complex(double) и результат

// копируется в `f'

Перегрузка операции присваивания = не оказывает влияние на инициализацию.

Инициализация, происходящая при передаче фактических параметров и при возврате из функции, эквивалентна инициализации вида

T x = a;

Инициализация, происходящая в выражении операции new (§R.5.3.3) и при инициализации базовых классов и членов, эквивалентна инициализации вида

T x(a);

Для массивов объектов класса с конструкторами используются при инициализации (§R.12.1) конструкторы как и для одиночных объектов. Если оказалось, что инициализаторов в списке меньше, чем элементов массива, используется стандартный конструктор (§R.12.1). Если его нет, список инициализаторов должен быть полным. Приведем пример:

complex cc = { 1, 2 }; // ошибка: необходимо

// использовать конструктор

complex v[6] = { 1,complex(1,2),complex,2 };

Здесь v[0] и v[3] инициализируются значением complex::complex(double), v[1] инициализируется complex::complex(double,double), а v[2], v[4] и v[5] инициализированы complex::complex.

Объект класса M может быть членом класса X в одном из следующих случаев:

(1) M не имеет конструктора;

(2) M имеет стандартный конструктор;

(3) X имеет конструктор и каждый из них задает инициализатор-ctor (§R.12.6.2) для члена M.

В случае 2 при создании составного объекта вызывается стандартный конструктор. Если член составного объекта имеет деструктор, то он вызывается при уничтожении составного объекта.

Конструкторы для нелокальных статических объектов вызываются в том порядке, в каком они идут в тексте программы, деструкторы вызываются в обратном порядке, см. также §R.3.4, §R.6.7, §R.9.4.

R.12.6.2 Инициализация членов и базовых классов

В определении конструктора можно задать инициализацию прямых базовых классов и членов, не наследуемых из базовых классов. Это особенно полезно для тех объектов, констант и ссылок, для которых различаются семантики присваивания и инициализации. Конструкция инициализатор-ctor имеет вид

инициализатор-ctor:

 : список-инициализаторов-членов

список-инициализаторов-членов:

Поделиться:
Популярные книги

Страж Кодекса. Книга IV

Романов Илья Николаевич
4. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IV

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Я тебя не отпускал

Рам Янка
2. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.55
рейтинг книги
Я тебя не отпускал

Пятнадцать ножевых 3

Вязовский Алексей
3. 15 ножевых
Фантастика:
попаданцы
альтернативная история
7.71
рейтинг книги
Пятнадцать ножевых 3

(Не)нужная жена дракона

Углицкая Алина
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
(Не)нужная жена дракона

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Комендант некромантской общаги 2

Леденцовская Анна
2. Мир
Фантастика:
юмористическая фантастика
7.77
рейтинг книги
Комендант некромантской общаги 2

Младший сын князя. Том 2

Ткачев Андрей Юрьевич
2. Аналитик
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Младший сын князя. Том 2

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3