Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
IT_Beginner
4 / 4 / 1
Регистрация: 17.02.2015
Сообщений: 64
#1

Auto_ptr для хэндлов - C++

19.02.2015, 00:42. Просмотров 844. Ответов 21
Метки нет (Все метки)

Необходимо придумать инструмент для работы с хэндлами файлов (аналог auto_ptr). Может кто-то что-то подобное уже делал?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2015, 00:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Auto_ptr для хэндлов (C++):

Сократить объявление auto_ptr для вновь создаваемого объекта - C++
Кстати, может кто подскажет... - в 3-й строке примера (std::autoptr...) можно как-то сократить запись, чтоб не повторять несколько раз new...

Auto_ptr - C++
Есть пару простых классов , раньше использовал простые указатели сейчас решил воспользоватся auto_ptr. В классе Duck есть : ...

констанстность auto_ptr - C++
auto_ptr<Nod>/*Nod**/ m_pRoot; void Insert1(auto_ptr<Nod>/*Nod**/ pRoot, int iValue){ if(m_pRoot.get() == 0) m_pRoot.get()...

Класс auto_ptr - C++
Добрый день. Вот мой вариант реализации: template<class T> class Auto_ptr { public: Auto_ptr(T* p) : pointer(p) { } ...

Передача auto_ptr по ссылке - C++
Передача auto_ptr по ссылке противоречит концепции владения. Нельзя быть полностью уверенным в том, что функция, получающая auto_ptr по...

Отличие get() и release() у auto_ptr - C++
Вопрос,конечно,глупой. Но не могу разобраться. В чём всё таки различение между auto_ptr<int> pi(new int(24)); cout<<pi.release();...

21
IT_Beginner
4 / 4 / 1
Регистрация: 17.02.2015
Сообщений: 64
20.02.2015, 00:18  [ТС] #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <windows.h>
 
class HandleGuard {
    HANDLE h_;
    HandleGuard(HandleGuard&);
    HandleGuard& operator=(HandleGuard&);
public:
    explicit HandleGuard(HANDLE h = INVALID_HANDLE_VALUE) : h_(h) {}
    ~HandleGuard() {
        if (h_ != INVALID_HANDLE_VALUE)
            CloseHandle(h_); 
    }
    HANDLE get() const {
        return h_; 
    }
    HANDLE release() {
        HANDLE tmp = h_;
        h_ = INVALID_HANDLE_VALUE;
        return tmp;
    }
    void reset(HANDLE h) {
        if (h_ != INVALID_HANDLE_VALUE) 
            CloseHandle(h_);
        h_ = h;
    }
};
0
DrOffset
7471 / 4467 / 1015
Регистрация: 30.01.2014
Сообщений: 7,321
20.02.2015, 00:32 #17
IT_Beginner, конкретно этот код нормально собирается (VS2013, если что).
0
hoggy
6766 / 2951 / 507
Регистрация: 15.11.2014
Сообщений: 6,639
Завершенные тесты: 1
20.02.2015, 00:34 #18
Цитата Сообщение от IT_Beginner Посмотреть сообщение
hoggy, Нет, но ведь принцип инкапсуляции никто не отменял?
Тогда не нужно городить велосипедов.
Используйте std::shared_ptr.

Инкапсуляцию он не нарушает.
0
IT_Beginner
4 / 4 / 1
Регистрация: 17.02.2015
Сообщений: 64
20.02.2015, 00:52  [ТС] #19
тоже 13я студия... ну тогде даже не знаю, хотел как-то потестить при работе с хендлом..

Добавлено через 17 минут
во, еще вопрос. А где тут реализация оператора присваивания? Объявление есть, а реализации...
0
DrOffset
7471 / 4467 / 1015
Регистрация: 30.01.2014
Сообщений: 7,321
20.02.2015, 11:41 #20
Цитата Сообщение от IT_Beginner Посмотреть сообщение
во, еще вопрос. А где тут реализация оператора присваивания? Объявление есть, а реализации...
Объявление приватное. Реализации нет. Это паттерн такой (в С++03), для запрета копирования и присваивания. Иными словами, объект этого класса нельзя копировать или присваивать.
0
IT_Beginner
4 / 4 / 1
Регистрация: 17.02.2015
Сообщений: 64
20.02.2015, 11:57  [ТС] #21
Ну конечно же!Для файла оно не надо. С утра все стало ясно, спасибо!
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
20.02.2015, 23:53 #22
А лучше std::unique_ptr, ну если конечно владение шарить не надо. Или может даже BOOST_SCOPE_EXIT для простых случаев
0
20.02.2015, 23:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2015, 23:53
Привет! Вот еще темы с ответами:

Как использовать auto_ptr? - C++
Ищу, ищу, но нигде не могу найти на русском, да и на буржуйском, толковое описание использования auto_ptr. Везде только какие-то...

Листинг хэндлов всех окон процесса - C#
Всем привет, такой вопрос: Вот так получаю хэндл процесса Process myproc = Process.GetProcessesByName(&quot;xxx&quot;); загвозка в том...

auto_ptr в connect() - C++ Qt
после того как заменил обычный указатель на умный std::auto_ptr&lt;QTimer&gt; timer(new QTimer); перестал работать connect(timer,...

Передать в функцию std::auto_ptr - C++ Builder
Доброго! Создаю массив std::auto_ptr&lt;TStringList&gt; lst(new TStringList); как правильно или в обще его передать в функцию, типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.