Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
#1

Класс auto_ptr - C++

12.06.2013, 16:34. Просмотров 405. Ответов 2
Метки нет (Все метки)

Добрый день. Вот мой вариант реализации:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class T>
class Auto_ptr {
public:
    Auto_ptr(T* p) : pointer(p) { }
    ~Auto_ptr() { delete []pointer; }
 
    T& operator*() { return *pointer; }
    
    T* operator->() { return &*pointer; }
 
    T* release() { return pointer; }
 
private:
    T* pointer;
};
Всё работает, как нужно, за исключением деструктора. Подскажите, как можно описать деструктор, чтобы он верно обрабатывал случаи, когда нужно вызывать delete pointer; (память выделялась на 1 элемент) и delete []pointer; (освобождение блока)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс auto_ptr (C++):

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

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

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

Auto_ptr для хэндлов - C++
Необходимо придумать инструмент для работы с хэндлами файлов (аналог auto_ptr). Может кто-то что-то подобное уже делал?

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.06.2013, 17:00 #2
частичная специализация
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
27
#include <iostream>
 
template<class T>
class AutoPtr
{
public:
    ~AutoPtr()
    {
        std::cout << "pointer" << std::endl;
    }
};
 
template<class T>
class AutoPtr<T[]>
{
public:
    ~AutoPtr()
    {
        std::cout << "array" << std::endl;
    }
};
 
int main()
{
    AutoPtr<int> ptr;
    AutoPtr<int[]> ptr2; 
}
Убежденный
Системный программист
Эксперт С++
15511 / 7009 / 1108
Регистрация: 02.05.2013
Сообщений: 11,441
Завершенные тесты: 1
12.06.2013, 18:07 #3
Цитата Сообщение от PG94 Посмотреть сообщение
Подскажите, как можно описать деструктор, чтобы он верно обрабатывал случаи, когда нужно вызывать delete pointer; (память выделялась на 1 элемент) и delete []pointer; (освобождение блока)?
А зачем ?
pointer и array - это концептуально разные вещи, у них разный интерфейс, начнем с этого.
Например, для array логично будет иметь перегруженный оператор индексации, а в классе
pointer-а он смотрится нелепо. То же самое с перегрузкой "operator ->", да и с некоторыми
другими методами тоже.

По моему мнению, здесь стоит делать разные классы.
Как в Boost, к примеру - scoped_array/shared_array, scoped_ptr/shared_ptr.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 18:07
Привет! Вот еще темы с ответами:

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

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Отдельно класс данных, класс формул и главный класс - C++
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...


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

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

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