Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое смарт поинтер? 
V
    Опции темы
Graf_h
Дата 28.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



Здравствуйте! расскажите пожалуйста что такое смарт поинтер и для чего он нужен!Никак не могу понять!
Заранее спасибо


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
MAKCim
Дата 28.3.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



это класс, безопасно моделирующий семантику обычного указателя путем переопределения соответствующих операторов
безопасное моделирование семантики подразумевает отсутствие утечек памяти и потенциального обращения по невалидным адресам
там, где нужно такое поведение, он и применяется

Это сообщение отредактировал(а) MAKCim - 28.3.2008, 11:56


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Graf_h
Дата 28.3.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



MAKCim,  можна примерчик! очень нужно. спасибо


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
MAKCim
Дата 28.3.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(Graf_h @  28.3.2008,  12:07 Найти цитируемый пост)
можна примерчик! очень нужно. спасибо 

пример чего?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Graf_h
Дата 28.3.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



Цитата(MAKCim @  28.3.2008,  12:25 Найти цитируемый пост)
пример чего?

Простой пример с смарт поинтером и его использование!


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
korian
Дата 28.3.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



вот упрощенный вариант std::auto_ptr
Код

class A 
{
public:
    void foo() {}
};

class APtr
{
public:
    explicit APtr(A* a) : m_a(a) {};
    ~APtr() {delete m_a;}
    A* operator -> () {return m_a;}
private:
    APtr APtr(const APtr&);
    APtr operator = (const APtr&);
    A* m_a;
};

typedef std::auto_ptr<A> APtr2;

void main()
{
    APtr objptr(new A);
    objptr->foo();
    APtr2 objptr2(new A);
    objptr2->foo();
}



Это сообщение отредактировал(а) korian - 28.3.2008, 13:16
PM   Вверх
Graf_h
Дата 28.3.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



korian, я так понял что A* m_a и есть смарт поинтер! но не пойму для чего он нужен


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
korian
Дата 28.3.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



смарт поинтер тут APtr и APtr2
а нужны они за тем, чтобы не следить за удалением, особенно в таких случаях:
Код


A* aptr = new A;

if (....)
{
     return; //оч. частая ошибка, забыли удалить aptr, а если не забыли то замучаемся помнить.
}

delete aptr;
return;


Добавлено @ 13:39
а вообще, смарт поинтеры - это продолжение идеомы ресурс должен пренадлежать объекту.
если выделяем какой-то ресурс - сразу передаем его некоторому объекту, а он уже сам заботится когда этот ресурс освободить
в случае с std::auto_ptr - освобождение ресурса при выходе из области действия.
boost::shared_ptr - освобождение при отсутствии ссылок на ресурс.
почитайте - http://www.insidecpp.ru/art/
учень увлекательно  smile 
а потом вот это - http://www.insidecpp.ru/books/cpp_coding_standards/


Это сообщение отредактировал(а) korian - 28.3.2008, 13:40
PM   Вверх
Graf_h
Дата 28.3.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: нет
Всего: 5



korian,  спасибо! +1 тема закрита

Это сообщение отредактировал(а) Graf_h - 28.3.2008, 15:34


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.