Программирование. Принципы и практика использования C++ Исправленное издание, стр. 419
} // объекты d и d2 уничтожаются здесьНапример, инициализация объекта
dB1::B1()B2::B2()M1::M1()M2::M2()ddM2::~M2()M1::~M1()B2::~B2()B1::~B1()dЕсли класс имеет конструктор, определенный пользователем, то неявный (сгенерированный компилятором) конструктор по умолчанию остается неопределенным (не генерируется).
A.12.5. Битовые поля
Битовое поле (bitfield) — это механизм упаковки многих маленьких значений в виде слова или в соответствии с установленным извне битовым форматом (например, форматом регистра какого-нибудь устройства). Рассмотрим пример.
struct PPN { unsigned int PFN: 22; int: 3; // не используется unsigned int CCA; bool nonreacheable; bool dirty; bool valid; bool global;};Упаковка битовых полей в виде слова слева направо приводит к следующему формату (см. раздел 25.5.5).

Битовое поле не обязано иметь имя, но если его нет, то к нему невозможно обратиться. Как это ни удивительно, но упаковка многих небольших значений в отдельное слово не всегда экономит память. На самом деле использование одного из таких значений приводит к излишнему расходу памяти по сравнению с использованием типа
charintA.12.6. Объединения
Объединение (union) — это класс, в котором все члены расположены в одной и той же области памяти. В каждый момент времени объединение может содержать только один элемент, причем считывается только тот элемент объединения, который был записан последним. Рассмотрим пример.
union U { int x; double d;}U a;a.x = 7;int x1 = a.x; // OKa.d = 7.7;int x2 = a.x; // Ой!Правила согласованного чтения и записи членов объединения компилятором не проверяются. Мы вас предупредили.
A.13. Шаблоны
Шаблон (template) — это класс или функция, параметризованные набором типов и/или целыми числами.
template<class T>class vector {public: // ... int size() const;private: int sz; T* p;};template<class T>int vector<T>::size() const{ return sz;}В списке шаблонных аргументов ключевое слово
classtypenameЦелочисленные шаблонные аргументы должны быть константными выражениями.
template<typename T, int sz>class Fixed_array {public: T a[sz]; // ... int size() const { return sz; };};Fixed_array<char,256> x1; // OKint var = 226;Fixed_array<char,var> x2; // ошибка: неконстантный шаблонный аргументA.13.1. Шаблонные аргументы
Аргументы шаблонного класса указываются каждый раз, когда используется его имя.
vector<int> v1; // OKvector v2; // ошибка: пропущен шаблонный аргументvector<int,2> v3; // ошибка: слишком много шаблонных аргументовvector<2> v4; // ошибка: ожидается тип шаблонного аргументаАргументы шаблонной функции обычно выводятся из ее аргументов.
template<class T>T find(vector<T>& v, int i){ return v[i];}