Здравствуйте, <Аноним>, Вы писали:
А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?
Купи книжу Элджера "Библиотека программиста" must-have для чтения,
тама не только про них очень подробно рассказывается но и еще про master points.
На пальцах всех аспектов не поймешь
Здравствуйте, Аноним, Вы писали:
А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?
Попробую очень коротко а хорошее изложение действительно у Элджера, а с извратами у Александреску
1. Для чего нужны: а) безопасность (не шифрование ), особенно, в смысле исключений и от себя самого (чтобы не забывать что-то сделать, скажем); б) автоматизация рутинных действий;
2. Пример (короче, чем в мсдн, надеюсь):
Здравствуйте, Vamp, Вы писали:
V>Читай Саттера Effective C++ — http://www.gotw.ca V>Есть русское издание — Эффекивное программирвоание на С++ V>Там ответы на все вопросы.
Г-н Vamp, конечно же, оговорился.
Есть гнига Кенига "Эффективное программирование на C++", есть книга Саттера "Решение сложных задач на C++". Однако про смартпойнтеры лучше описано у Александреску "Современное проектирование на C++".
ВН>Г-н 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>};
А что будет в этом случае:
[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 секции.
Здравствуйте, <Аноним>, Вы писали:
А>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код?
ИМХО Новичкам про это дело надо читать Элджера, а не Александреску или Саттера.
А если использовать умные указатели, то лучше сразу взять boost::shared_ptr и не изобретать велосипед. www.boost.org, если не ошибаюсь.
Здравствуйте, LaFlour, Вы писали:
LF>Здравствуйте, <Аноним>, Вы писали:
А>>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код? LF>Купи книжу Элджера "Библиотека программиста" must-have для чтения, LF>тама не только про них очень подробно рассказывается но и еще про master points. LF>На пальцах всех аспектов не поймешь
На сайте есть рецензия — посмотрите.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Vamp, Вы писали:
V>Читай Саттера Effective C++ — http://www.gotw.ca V>Есть русское издание — Эффекивное программирвоание на С++ V>Там ответы на все вопросы.
Это книга скотта Мейерса — рецензия тоже есть на сайте.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
АШ>Ответ:
АШ>1) потерянная ссылка a.t_ при (2); АШ>2) b.t_ разделится тремя объектами a (2), b, с (1), что приведет к неопределенному поведению;
АШ>Так что, наверное, лучше не приводить таких примеров, либо отмечать в интерфейсе неправомочность использования конструктора копий и оператора присваивания с помощью private секции.
Неужели это все возможные неприятности!?
Это именно пример для демонстрации самой идеи (одной из), а не граблей; чтобы не наступать на последние указаны книжки.
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, LaFlour, Вы писали:
LF>>Здравствуйте, <Аноним>, Вы писали:
А>>>Subject... Для чего они нужны и может ли кто-нибудь привести конкретный пример/код? LF>>Купи книжу Элджера "Библиотека программиста" must-have для чтения, LF>>тама не только про них очень подробно рассказывается но и еще про master points. LF>>На пальцах всех аспектов не поймешь LVV>На сайте есть рецензия — посмотрите.
А мне то она зачем? я книгу пару раз читал. Толку какого от рецензии?