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

Класс auto_ptr - C++

Восстановить пароль Регистрация
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
12.06.2013, 16:34     Класс auto_ptr #1
Добрый день. Вот мой вариант реализации:
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++ Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
Как использовать auto_ptr? C++
C++ Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
констанстность auto_ptr C++
Auto_ptr C++
C++ Auto_ptr для хэндлов
Сократить объявление auto_ptr для вновь создаваемого объекта C++
Передача auto_ptr по ссылке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.06.2013, 17:00     Класс auto_ptr #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; 
}
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,298
Завершенные тесты: 1
12.06.2013, 18:07     Класс auto_ptr #3
Цитата Сообщение от PG94 Посмотреть сообщение
Подскажите, как можно описать деструктор, чтобы он верно обрабатывал случаи, когда нужно вызывать delete pointer; (память выделялась на 1 элемент) и delete []pointer; (освобождение блока)?
А зачем ?
pointer и array - это концептуально разные вещи, у них разный интерфейс, начнем с этого.
Например, для array логично будет иметь перегруженный оператор индексации, а в классе
pointer-а он смотрится нелепо. То же самое с перегрузкой "operator ->", да и с некоторыми
другими методами тоже.

По моему мнению, здесь стоит делать разные классы.
Как в Boost, к примеру - scoped_array/shared_array, scoped_ptr/shared_ptr.
Yandex
Объявления
12.06.2013, 18:07     Класс auto_ptr
Ответ Создать тему
Опции темы

Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru