Albert Makhmutov - Идиомы и стили С++

Здесь есть возможность читать онлайн «Albert Makhmutov - Идиомы и стили С++» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Идиомы и стили С++: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Идиомы и стили С++»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Идиомы и стили С++ — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Идиомы и стили С++», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

char CPool::buffer[8096];

char* CPool::position = CPool::buffer;

Чтобы довести его до более-менее приличного вида, нужно как минимум обрабатывать размер выделяемого блока и количество оставшейся памяти в буфере; сделать буфер нестатическим; при недостатке памяти выделять новый буфер-создавать новый экземпляр пула; статическими должны быть либо функция выделения памяти из пула либо указатель на свежий, незаполненный пул.

Несколько строк занудства.

Операционка неохотно берет себе память обратно. Возможно, освобожденный фрагмент вообще останется в ведении менеджера памяти самой программы, до ее завершения. Но конечно крупные куски она заглатывает тут же. Если возитесь с мелочью, проверьте этот момент на всякий случай; нет ничего приятнее свопа или уборки мусора в нужное время!

Глобальный оператор ::operator new()и глобальный оператор ::operator delete()не трогайте. Проще и намного умнее перегружать операторы в классах.

new, operator newи конструктор, а так же delete, operator deleteи деструктор - АБСОЛЮТНО разные вещи. Как мы уже выяснили, их можно вызывать по отдельности. Не давайте себя запутать, если кто-нибудь будет говорить об операторе new- такого не бывает, бывает или оператор operator new(), или ключевое слово new.

Шаг 20 - Временные объекты. Неявные вызовы конструкторов и их подавление.

Не удается углубиться в какую-либо тему. Приходится касаться по верхам, потом переключаться на что-то другое. С другой стороны, может это и правильно, часто достаточно только знать, что есть ТАКОЕ решение, а изучить детально можно и позже, когда сделаешь окончательный выбор. Да и не очень это интересно - что за радость переписать двадцать страниц из учебника, или перевести статью какого-нибудь доктора CS? Объяснения которого в точности так же логичны, как рассказ Ивана Бездомного насчет "…Берлиоза зарезало трамваем, а тот заранее знал про масло, которое Аннушка пролила" - то есть логика и связь есть - но только для него самого.

Чтож, к делу.

А кто такие временные объекты? Локальные переменные с замечательными именами a, a1, a2, a_1, tmp1, tmp2? (Кстати ни за что не берите на работу болванов, которые так именуют переменные; пусть на FoxProпишут. Думаю написать про это отдельный Шаг - причины для немедленного увольнения.) Вообще-то нет. Временные объекты - это объекты, которые не имеют имен в коде и неявно создаются компилятором. Поскольку неявные "подарки" компилятора иногда бывают очень некстати, лучше заранее знать, чего можно ожидать от него. А зачем он их создает? Первое - при выполнении преобразования типов, для вызова функций. Второе - для возвращения объекта из функции.

Придется немного поэкспериментировать. Поэтому скопируйте себе код небольшого класса:

#include ‹iostream.h›

class CInt {

private:

int m_i;

int m_instance;

static int iCounter;

public:

CInt (int);

CInt (const CInt&);

~CInt ();

CInt operator+ (const CInt&);

CInt& operator+=(const CInt&);

CInt& operator= (const CInt&); // operator int ();

};

int CInt::iCounter = 0;

CInt::CInt (int _i=0): m_i(_i) {

m_instance = ++iCounter;

cout‹‹"defa constr " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

}

CInt::CInt (const CInt& _i): m_i(_i.m_i) {

m_instance = ++iCounter;

cout‹‹"copy constr " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

}

CInt::~CInt () {

iCounter--;

cout ‹‹"~destructor " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

}

CInt& CInt::operator=(const CInt& _i) {

m_i = _i.m_i;

cout ‹‹"assert oper " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

return *this;

}

CInt CInt::operator+(const CInt& _i) {

cout‹‹"addi operat " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

return CInt (m_i + _i.m_i);

}

CInt& CInt::operator+= (const CInt& _i) {

m_i += _i.m_i;

cout‹‹"autoadd ope " ‹‹ m_instance ‹‹ " "‹‹ m_i‹‹ endl;

return *this;

}

/*

CInt::operator int () {

return m_i;

}

*/

int main (void) {

cout ‹‹ "start" ‹‹ endl;

// Позиция 1.

CInt i_test = CInt (2) + CInt (4);

cout ‹‹ "firststop" ‹‹ endl;

{

// Позиция 2.

}

cout ‹‹ "thirdstop" ‹‹ endl;

return 0;

}

Пояснения: класс представляет целые числа. Определены конструктор по умолчанию и копирования, присваивание, пара арифметических операторов, оператор преобразования в int(закомментирован). В функции mainотмечены 2 позиции для экспериментов.

Еще момент - вызвала затруднения форма конструктора со списком инициализации, типа этой:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Идиомы и стили С++»

Представляем Вашему вниманию похожие книги на «Идиомы и стили С++» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Идиомы и стили С++»

Обсуждение, отзывы о книге «Идиомы и стили С++» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x