Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
PG94
2 / 2 / 12
Регистрация: 15.01.2012
Сообщений: 181
#1

Класс auto_ptr - C++

12.06.2013, 16:34. Просмотров 444. Ответов 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; (освобождение блока)?
http://www.cyberforum.ru/cpp-beginners/thread1301137.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 16:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Класс auto_ptr (C++):

констанстность auto_ptr
auto_ptr&lt;Nod&gt;/*Nod**/ m_pRoot; void Insert1(auto_ptr&lt;Nod&gt;/*Nod**/ pRoot,...

Отличие get() и release() у auto_ptr
Вопрос,конечно,глупой. Но не могу разобраться. В чём всё таки различение между ...

Auto_ptr для хэндлов
Необходимо придумать инструмент для работы с хэндлами файлов (аналог auto_ptr)....

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

Передача auto_ptr по ссылке
Передача auto_ptr по ссылке противоречит концепции владения. Нельзя быть...

2
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 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; 
}
1
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 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.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 18:07
Привет! Вот еще темы с решениями:

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

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

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

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не...


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

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

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