С++ - язык, который изучается постепенно.Класс LockPtr
создание сайта визитки
Студия Web-дизайна, создание, раскрутка сайтов интернет реклама, подача объявлений на доски, продвижение и сопровождение сайтов
Карта сайта | Зарабатывайте с нами  | Сделать заказ
Наши услуги
Справочники
Самоучитель Internet Explorer
PHP и MySQL
Компьютерные сети
Самоучитель о С++
Новости
Новости для PDA
Реклама
Студия WebKuban.Ru - Создание и поддержка сайтов, интернет магазинов Каталог сайтов Всего.RU Интернет-каталог WWW.SABRINA.RU Refo.ru - русские сайты Каталог HeadNet.Ru Интернет-магазин цифровых товаров Каталог Ресурсов Интернет
Реклама
Язык С++
По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями.
И все же в этом изобилии наблюдается удручающее однообразие.
Добро пожаловать на сайт студии Web-дизайна "САР"


Материалы книги получены с http://www.itlibitum.ru/

Класс LockPtr

Ага! Мы подошли к центральной идее всей концепции - указателям, которые разрешают обновление указываемого объекта. Предтранзакционный (предназначенный для отмены) образ хранится в ConstPtr, а текущий обновленный образ доступен только через LockPtr. Класс LockPtr содержит уже знакомые функции Rollback() и Commit(). В функции Snapshot() нет необходимости, поскольку LockPtr при необходимости создает образы в операторе ->.

template <class Type>

class LockPtr : public Lock {

friend class ConstPtr<Type>;

private:

ConstPtr<Type>* master_ptr;

Type* new_image;

Transaction* transaction;

LockPtr(Transaction* t, ConstPtr<Type>* cp);

virtual ~LockPtr();

virtual void Rollback();

virtual void Commit();

public:

Type* operator->() const { return new_image; }

};

template <class Type>

LockPtr<Type>::LockPtr(Transaction* t, ConstPtr<Type>* cp)

: transaction(t), master_ptr(cp), new_image(new Type(*(cp->old_image)))

{

}

template <class Type>

LockPtr<Type>::~LockPtr()

{

// В сущности происходит откат

delete new_image; // Отказаться от изменений

master_ptr->lock = NULL; // Оставить ConstPtr

}

template <class Type>

void LockPtr<Type>::Rollback()

{

delete new_image;

new_image = new Type(*(master_ptr->old_image));

}

template <class Type>

void LockPtr<Type>::Commit()

{

delete master_ptr->old_image;

master_ptr->old_image = new_image; // Переместить в master_ptr

new_image = new Type(*new_image); // Нужна новая копия

}

Деструктор объявлен закрытым, чтобы никто не мог напрямую удалить LockPtr. Вместо этого

транзакция-владелец должна сделать это через базовый класс Lock. Функции Rollback() и Commit() объявлены виртуальными, чтобы с их помощью можно было решать задачи, относящиеся к конкретному типу (например, создание и уничтожение образов). Обе функции после завершения оставляют ConstPtr заблокированным.


Назад    Содержание    Далее    



Специальное предложение


Сайт визитка за 90 $
создание, разработка сайта
  • Регистрация доменного имени в зоне .net.ru или .pp.ru (1 год)
  • Хостинг (1 год)
  • Готовый дизайн
  • Поддержка РНР
  • 3 страницы сайта (главная, о фирме, контакты)
  • Регистрация в 256 поисковых системах и каталогах
  • Форма сообщений
заказать создание сайта визитки
Размещение объявлений
Недорого предлагаем разослать ваше рекламное предложение о товарах или услугах на сотни досок объявлений по всему Рунету.
размещение объявлений на электронных досках
Друзья сайта
  • Реклама - каталог ресурсов Реклама - каталог ресурсов - Реклама Карта сайта
  • Просто добавь свой сайт
  • Ипотека, коммерческая и загородная недвижимость, продажа квартир и коттеджей
  • Выставки, выставки России, Выставки Москвы, зарубежные выставки
  • Music singer R&B song
  • Язык С++
    Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.
    Copyright студия Web-дизайна САР © 2007
    Используются технологии uCoz