Содержание
- 2. Ресурс – это физический или виртуальный компонент компьютерной системы, обладающий свойством ограниченности. (©Wikipedia)
- 3. Физические ресурсы Процессор Оперативная память Жесткий диск Сетевой адаптер Видеокарта Звуковая карта Устройства ввода/вывода (клавиатура, мышь,
- 4. Виртуальные ресурсы Виртуальная память Файлы Сокеты Объекты синхронизации (мьютекс, критическая секция, семафор и т.п.) Объекты межпроцессного
- 5. C++ storage duration categories Static – глобальные переменные, статические локальные переменные, статические члены классов. Создаются при
- 6. Объекты с автоматической продолжительностью хранения Преимущества: 1. Быстрое выделение памяти. 2. Объекты на стеке автоматически разрушаются
- 7. Специальные методы классов 1. Версии конструкторов копирования и операторов присваивания, генерируемые компилятором, осуществляют “shallow copy” членов.
- 8. Специальные методы классов 2. Проверяйте в операторе присваивание случай самоприсваивания: Test& operator=(const Test& other) { if
- 9. Общая схема работы с ресурсами Захватить ресурс (open, create, allocate, attach) Использовать ресурс Освободить ресурс (close,
- 10. Захват ресурса без освобождения class Singleton { static Singleton& get() { static Singleton instance; return instance;
- 11. “Ручное” управление ресурсами void f() { Test *test = new Test; DoSomething(test); delete test; } CRITICAL_SECTION
- 12. Stack unwinding class Test { public: ~Test() { throw std::runtime_error(""); // DON’T DO IT!!! } };
- 13. Использование RAII (guards) class SocketGuard { public: SocketGuard(SOCKET sock_) : sock_ (sock) {} operator SOCKET() {
- 14. std::auto_ptr class Test { }; void f() { std::auto_ptr p(new Test); ... } void f() {
- 15. std::auto_ptr Недостатки: Не может использоваться в контейнерах STL. Не может быть использован с new[]. Неочевидная передача
- 16. std::unique_ptr template default_delete > class unique_ptr { typedef ... pointer; typedef T element_type; typedef D deleter_type;
- 17. std::unique_ptr unique_ptr p1{ new int(10) }; //Error: assignment operator is deleted unique_ptr p2 = p1; //
- 18. std::unique_ptr void del(void* data){ VirtualFree(data, 0, MEM_RELEASE); } void *pData = VirtualAlloc( nullptr, 0x4000, MEM_COMMIT, PAGE_READWRITE);
- 19. std::make_unique unique_ptr p1{ new int(100) }; // The same unique_ptr p2{ make_unique (100)}; void f(unique_ptr p1,
- 20. std::shared_ptr std::shared_ptr p1{new SomeClass }; std::shared_ptr p2 = p1; std::shared_ptr p{ new int[10] }; // Compiles,
- 21. std::shared_ptr void del(void* data){ VirtualFree(data, 0, MEM_RELEASE); } void *pData = VirtualAlloc( nullptr, 0x4000, MEM_COMMIT, PAGE_READWRITE);
- 22. Внутреннее устройство shared_ptr
- 23. Пример использования weak_ptr class ObjectLoader { map > cache_; shared_ptr LoadObject(int id) { std::shared_ptr object; std::weak_ptr
- 24. Передача smart pointers как аргумента void f(std::unique_ptr p); f(make_unique (10)); void f(std::unique_ptr & p) { p.reset(new
- 25. Передача smart pointers как аргумента void f(std::shared_ptr arg); { std::shared_ptr p(new int(10); f(p); }
- 26. Контейнеры void FillBuffer( void* pBuffer, size_t bufferSize); // version with raw ponter uint8_t *buf = new
- 27. Контейнеры // First DLL vector messages; FillMessages(messages); // Second DLL void FillMessages(vector & messages) { for
- 28. Exception safety 1. Базовая гарантия – контейнер при возникновении исключения остается в согласованном состоянии; нет утечек
- 30. Скачать презентацию