Что такое smart pointers?
От: Аноним  
Дата: 21.01.04 04:40
Оценка:
Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?
Re: Что такое smart pointers?
От: Евгений Коробко  
Дата: 21.01.04 05:33
Оценка:
Они применяются, например, в COM для автоматического подсчёта ссылок. Выглядти примерно так:
template<class T>
class SmartPointer<T>
{
  T *m_pointer;
 public:
  SmartPointer(T* p):m_pointer(p){m_pointer->AddRef();};
  ~SmartPointer() {m_pointer->Release();};
  T* operator () {return m_pointer;}
}

После этого вместо T* используешь SmartPointer<T>, и о подсчёте ссылок можешь забыть

Исправлено форматирование. Пожалуйста, пользуйтесь тэгами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.
Евгений Коробко
Re: Что такое smart pointers?
От: LaFlour Австралия blog: http://spaces.live.com/laflour
Дата: 21.01.04 06:54
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?

Купи книжу Элджера "Библиотека программиста" must-have для чтения,
тама не только про них очень подробно рассказывается но и еще про master points.
На пальцах всех аспектов не поймешь
Re: Что такое smart pointers?
От: Vamp Россия  
Дата: 21.01.04 07:25
Оценка:
Читай Саттера Effective C++ — http://www.gotw.ca
Есть русское издание — Эффекивное программирвоание на С++
Там ответы на все вопросы.
Да здравствует мыло душистое и веревка пушистая.
Re: Что такое smart pointers?
От: konst  
Дата: 21.01.04 08:25
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?


Попробую очень коротко а хорошее изложение действительно у Элджера, а с извратами у Александреску
1. Для чего нужны: а) безопасность (не шифрование ), особенно, в смысле исключений и от себя самого (чтобы не забывать что-то сделать, скажем); б) автоматизация рутинных действий;
2. Пример (короче, чем в мсдн, надеюсь):
template <class T> class SmartPtr
{
  T* t_;
public:
  SmartPtr(T* t) : t_(t) {}
  ~SmartPtr() { delete t_; }
  T* operator -> () { return t_; }
  
};

Зачем это? 1-ое чтоб не забыть вызвать delete. 2-ое чтоб был вызван delete в случае исключения:
struct T
{
  void f() { throw 1; }
};
void f()
{
  SmartPtr pt(new T);
  pt->f();
}
Re[2]: Что такое smart pointers?
От: Вадим Никулин Россия Здесь
Дата: 21.01.04 08:48
Оценка: +2
Здравствуйте, Vamp, Вы писали:

V>Читай Саттера Effective C++ — http://www.gotw.ca

V>Есть русское издание — Эффекивное программирвоание на С++
V>Там ответы на все вопросы.

Г-н Vamp, конечно же, оговорился.
Есть гнига Кенига "Эффективное программирование на C++", есть книга Саттера "Решение сложных задач на C++". Однако про смартпойнтеры лучше описано у Александреску "Современное проектирование на C++".
Re[3]: Что такое smart pointers?
От: Vamp Россия  
Дата: 21.01.04 08:53
Оценка:
ВН>Г-н Vamp, конечно же, оговорился.
Ну конечно. Я имел в виду Exceptional C++. А Effective C++ — это Майерса книга. Тоже полезная. И там тоже про смартпойнтеры есть.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Что такое smart pointers?
От: Аноним  
Дата: 21.01.04 09:14
Оценка:
Спасибо! Помогло!

Здравствуйте, konst, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?


K>Попробую очень коротко а хорошее изложение действительно у Элджера, а с извратами у Александреску

K>1. Для чего нужны: а) безопасность (не шифрование ), особенно, в смысле исключений и от себя самого (чтобы не забывать что-то сделать, скажем); б) автоматизация рутинных действий;
K>2. Пример (короче, чем в мсдн, надеюсь):
K>
K>template <class T> class SmartPtr
K>{
K>  T* t_;
K>public:
K>  SmartPtr(T* t) : t_(t) {}
K>  ~SmartPtr() { delete t_; }
K>  T* operator -> () { return t_; }
  
K>};
K>

K>Зачем это? 1-ое чтоб не забыть вызвать delete. 2-ое чтоб был вызван delete в случае исключения:
K>
K>struct T
K>{
K>  void f() { throw 1; }
K>};
K>void f()
K>{
K>  SmartPtr pt(new T);
  pt->>f();
K>}
K>
Re[2]: Что такое smart pointers?
От: Анатолий Широков СССР  
Дата: 21.01.04 09:40
Оценка: +1
K>2. Пример (короче, чем в мсдн, надеюсь):
K>
K>template <class T> class SmartPtr
K>{
K>  T* t_;
K>public:
K>  SmartPtr(T* t) : t_(t) {}
K>  ~SmartPtr() { delete t_; }
K>  T* operator -> () { return t_; }
  
K>};

А что будет в этом случае:

[ccode]
{
  SpartPtr<int> a(new int(1));
  SpartPtr<int> b(new int(2));
  SpartPtr<int> с(b); // (1)

  a = b; // (2)
}

?

Ответ:

1) потерянная ссылка a.t_ при (2);
2) b.t_ разделится тремя объектами a (2), b, с (1), что приведет к неопределенному поведению;

Так что, наверное, лучше не приводить таких примеров, либо отмечать в интерфейсе неправомочность использования конструктора копий и оператора присваивания с помощью private секции.
Re: Что такое smart pointers?
От: Рома Мик Россия http://romamik.com
Дата: 21.01.04 16:52
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?

ИМХО Новичкам про это дело надо читать Элджера, а не Александреску или Саттера.
А если использовать умные указатели, то лучше сразу взять boost::shared_ptr и не изобретать велосипед. www.boost.org, если не ошибаюсь.
... << RSDN@Home 1.1.3 beta 1 >>
Re[2]: Что такое smart pointers?
От: LaptevVV Россия  
Дата: 22.01.04 08:05
Оценка:
Здравствуйте, LaFlour, Вы писали:

LF>Здравствуйте, <Аноним>, Вы писали:


А>>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?

LF>Купи книжу Элджера "Библиотека программиста" must-have для чтения,
LF>тама не только про них очень подробно рассказывается но и еще про master points.
LF>На пальцах всех аспектов не поймешь
На сайте есть рецензия — посмотрите.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Что такое smart pointers?
От: LaptevVV Россия  
Дата: 22.01.04 08:06
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Читай Саттера Effective C++ — http://www.gotw.ca

V>Есть русское издание — Эффекивное программирвоание на С++
V>Там ответы на все вопросы.
Это книга скотта Мейерса — рецензия тоже есть на сайте.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Что такое smart pointers?
От: konst  
Дата: 22.01.04 08:37
Оценка:
АШ>Ответ:

АШ>1) потерянная ссылка a.t_ при (2);

АШ>2) b.t_ разделится тремя объектами a (2), b, с (1), что приведет к неопределенному поведению;

АШ>Так что, наверное, лучше не приводить таких примеров, либо отмечать в интерфейсе неправомочность использования конструктора копий и оператора присваивания с помощью private секции.


Неужели это все возможные неприятности!?
Это именно пример для демонстрации самой идеи (одной из), а не граблей; чтобы не наступать на последние указаны книжки.
Re[3]: Что такое smart pointers?
От: LaFlour Австралия blog: http://spaces.live.com/laflour
Дата: 22.01.04 10:28
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, LaFlour, Вы писали:


LF>>Здравствуйте, <Аноним>, Вы писали:


А>>>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?

LF>>Купи книжу Элджера "Библиотека программиста" must-have для чтения,
LF>>тама не только про них очень подробно рассказывается но и еще про master points.
LF>>На пальцах всех аспектов не поймешь
LVV>На сайте есть рецензия — посмотрите.
А мне то она зачем? я книгу пару раз читал. Толку какого от рецензии?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.