умный указатель
От: Аноним  
Дата: 06.12.04 23:39
Оценка:
Добрый день,

Реализованы ли смарт поинтеры в STL'е?
Re: умный указатель
От: _chipset Россия http://merlinko.com
Дата: 07.12.04 00:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день,


А>Реализованы ли смарт поинтеры в STL'е?

Что то типа этого.. auto_ptr
"Всё что не убивает нас, делает нас сильнее..."
Re[2]: умный указатель
От: Аноним  
Дата: 07.12.04 00:09
Оценка: -1
Здравствуйте, _chipset, Вы писали:

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


А>>Добрый день,


А>>Реализованы ли смарт поинтеры в STL'е?

_>Что то типа этого.. auto_ptr

его же вроде не рекомендуется использовать
даже запрещено комитетом по стандартизации
Re[3]: умный указатель
От: jazzer Россия Skype: enerjazzer
Дата: 07.12.04 00:24
Оценка:
Здравствуйте, Аноним, Вы писали:

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


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


А>>>Добрый день,


А>>>Реализованы ли смарт поинтеры в STL'е?

_>>Что то типа этого.. auto_ptr

А>его же вроде не рекомендуется использовать

А>даже запрещено комитетом по стандартизации

его запрещено использовать в контейнерах, так как он не copy-constructible.
и только.

в остальных случаях — вперед, отличная и быстрая вещь.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: умный указатель
От: Аноним  
Дата: 07.12.04 00:55
Оценка:
Здравствуйте, jazzer, Вы писали:

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


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


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


А>>>>Добрый день,


А>>>>Реализованы ли смарт поинтеры в STL'е?

_>>>Что то типа этого.. auto_ptr

А>>его же вроде не рекомендуется использовать

А>>даже запрещено комитетом по стандартизации

J>его запрещено использовать в контейнерах, так как он не copy-constructible.

J>и только.

J>в остальных случаях — вперед, отличная и быстрая вещь.


В "эффективном использовании STL" Скота Мейрса
как раз говориться что про контейнеры да еще приводиться код который показывает непригодность auto_ptr в целом


auto_ptr<Widget> pw1(new Widget);
auto_ptr<Widget> pw2(pw1);

pw1 = pw2;

// копирование указателя auto_ptr приводит к его модификации
Re[4]: умный указатель
От: Аноним  
Дата: 07.12.04 00:56
Оценка: 6 (1)
Здравствуйте, jazzer, Вы писали:

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


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


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


А>>>>Добрый день,


А>>>>Реализованы ли смарт поинтеры в STL'е?

_>>>Что то типа этого.. auto_ptr

А>>его же вроде не рекомендуется использовать

А>>даже запрещено комитетом по стандартизации

J>его запрещено использовать в контейнерах, так как он не copy-constructible.

J>и только.

J>в остальных случаях — вперед, отличная и быстрая вещь.


он что и delete сделает за меня?
то есть что то типа сборки мусора?
Re: умный указатель
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 07.12.04 04:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день,


А>Реализованы ли смарт поинтеры в STL'е?


Смарт поинтер в srl-е не реализован. Реализован авто-поинтер (auto_ptr). Разница между ними в следующем:
— смарт поинтер при копировании использует какой-нибудь механизм контроля числа владельцев реального указателя (точнее числа копий самого указателя); это обычно либо подсчёт ссылок, либо двунаправленый список копий; удаление указателя происходит когда его отпускает последний владелец (счётчик ссылок доходит до 0, список пустеет);
— авто-поинтер при копировании передаёт все права на хранимый указатель копии, при уничтожении авто-поинтера всегда уничтожатеся и указатель; по этим причинам комитетом по стандартизации запрещено использование авто-поинтера в стандартных контейнерах (некоторые операции с контейнерами могут приводить к копированию элементов, что может повлечь за собой разрушение реальных указателей), "правильные" реализации stl не допускают такое использование (при попытке вылетает ошибка компиляции), реализация используемая в студии вопреки требований стандарта такое использование допускает.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[3]: умный указатель
От: MaximE Великобритания  
Дата: 07.12.04 07:25
Оценка:
wrote:

[]

> его же вроде не рекомендуется использовать

> даже запрещено комитетом по стандартизации

Это не так.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 delta
Re[5]: умный указатель
От: MaximE Великобритания  
Дата: 07.12.04 07:27
Оценка: :))) :)
wrote:

[]

> он что и delete сделает за меня?


... и даже за меня

> то есть что то типа сборки мусора?


это покруче сборки мусора, так как обеспечивает детерминированный и упорядоченный вызов деструкторов.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 delta
Re[2]: умный указатель
От: MaximE Великобритания  
Дата: 07.12.04 07:32
Оценка: +3
Mr. None wrote:

> Смарт поинтер в srl-е не реализован. Реализован авто-поинтер (auto_ptr). Разница между ними в следующем:


Smart pointer — это то, что не plain pointer, и auto_ptr<> — это smart-pointer.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 delta
Re: умный указатель
От: korzhik Россия  
Дата: 07.12.04 07:44
Оценка: 13 (2)
Здравствуйте, Аноним, Вы писали:

А>Добрый день,


А>Реализованы ли смарт поинтеры в STL'е?


как уже сказали auto_ptr.
хорошая вещь если уметь пользоваться.
здесь можно кое что почитать про auto_ptr.
В статье, Герб Саттер приводит пример реализации идиомы Pimpl с помощью auto_ptr,
ты так не делай, почему,читай здесь
Автор: Павел Кузнецов
Дата: 23.01.03
.
Re[5]: умный указатель
От: Glоbus Украина  
Дата: 07.12.04 08:43
Оценка:
Здравствуйте, Аноним, Вы писали:


А>В "эффективном использовании STL" Скота Мейрса

А>как раз говориться что про контейнеры да еще приводиться код который показывает непригодность auto_ptr в целом

Ну-ну-ну... В целом это ты загнул. В контейнерах как уже сказали — да, нельзя использовать (ну или нежелательно), а так пользуй на здоровье. А ваще его например очень активно пользует Саттер в примерах в "Решении сложных задач на С++". Полистай, там много интересных вещей есть.
Удачи тебе, браток!
Re[5]: умный указатель
От: LaptevVV Россия  
Дата: 07.12.04 10:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>>>Реализованы ли смарт поинтеры в STL'е?

_>>>>Что то типа этого.. auto_ptr

А>>>его же вроде не рекомендуется использовать

А>>>даже запрещено комитетом по стандартизации

J>>его запрещено использовать в контейнерах, так как он не copy-constructible.

J>>и только.
J>>в остальных случаях — вперед, отличная и быстрая вещь.
А>В "эффективном использовании STL" Скота Мейрса
А>как раз говориться что про контейнеры да еще приводиться код который показывает непригодность auto_ptr в целом
А>
А>auto_ptr<Widget> pw1(new Widget);
А>auto_ptr<Widget> pw2(pw1);
А>pw1 = pw2;
А>// копирование указателя auto_ptr приводит к его модификации
А>

Почитай те у Герба Саттера "Решение сложных задач на С++" — он там много времени посвящает этому указателю, разбирая. когда его можно и нужно использовать, а когда нельзя и опасно...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: умный указатель
От: LaptevVV Россия  
Дата: 07.12.04 10:06
Оценка:
Здравствуйте, Mr. None, Вы писали:

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


А>>Добрый день,


А>>Реализованы ли смарт поинтеры в STL'е?


MN>Смарт поинтер в srl-е не реализован. Реализован авто-поинтер (auto_ptr). Разница между ними в следующем:

MN>- смарт поинтер при копировании использует какой-нибудь механизм контроля числа владельцев реального указателя (точнее числа копий самого указателя); это обычно либо подсчёт ссылок, либо двунаправленый список копий; удаление указателя происходит когда его отпускает последний владелец (счётчик ссылок доходит до 0, список пустеет);
MN>- авто-поинтер при копировании передаёт все права на хранимый указатель копии, при уничтожении авто-поинтера всегда уничтожатеся и указатель; по этим причинам комитетом по стандартизации запрещено использование авто-поинтера в стандартных контейнерах (некоторые операции с контейнерами могут приводить к копированию элементов, что может повлечь за собой разрушение реальных указателей), "правильные" реализации stl не допускают такое использование (при попытке вылетает ошибка компиляции), реализация используемая в студии вопреки требований стандарта такое использование допускает.
Не, и то и другое — это разные виды умного указателя. они отличаются стратегией владения объекта. Об этом хорошонаписал Александреску в своей книжке "Современное проектирование на С++". Рецензия — на сайте...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: умный указатель
От: Nose Россия  
Дата: 07.12.04 10:31
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:


А>
А>// копирование указателя auto_ptr приводит к его модификации
А>


это не бага, это фича.
Re[3]: умный указатель
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 07.12.04 13:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>его же вроде не рекомендуется использовать

А>даже запрещено комитетом по стандартизации

Я так понимаю, автор неверно трактовал слова Скотта Мейерса из его книги Effective STL:

Containers of auto_ptr (COAPs) are prohibited. Code attempting to use them shouldn't compile. The C++
Standardization Committee expended untold effort to arrange for that to be the case.

Effective STL, Item 8 — Never create containers of auto_ptrs.

далее как раз приводится пример с передачей прав владения при копировании auto_ptr-ов. Но, как уже было сказано, это фича auto_ptr-ов. В STL других умных указателей нет. Гораздо более богатый выбор смарт поинтеров предалагает boost: shared_ptr, scoped_ptr, intrusive_ptr, weak_ptr, shared_array и scoped_array. Посмотреть примеры использования можно здесь
"Что не завершено, не сделано вовсе" Гаусс
Re[3]: умный указатель
От: jazzer Россия Skype: enerjazzer
Дата: 07.12.04 13:52
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Mr. None wrote:


>> Смарт поинтер в srl-е не реализован. Реализован авто-поинтер (auto_ptr). Разница между ними в следующем:


ME>Smart pointer — это то, что не plain pointer, и auto_ptr<> — это smart-pointer.


похоже, мы наблюдаем исчезновение термина Smart pointer и употребление его в качестве разговорного названия boost::smart_ptr
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: умный указатель
От: Sergey Россия  
Дата: 07.12.04 14:00
Оценка:
Hello, jazzer!
You wrote on Tue, 07 Dec 2004 13:52:00 GMT:

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


ME>> Mr. None wrote:


??>>> Смарт поинтер в srl-е не реализован. Реализован авто-поинтер
??>>> (auto_ptr). Разница между ними в следующем:

ME>> Smart pointer — это то, что не plain pointer, и auto_ptr<> — это

ME>> smart-pointer.

j> похоже, мы наблюдаем исчезновение термина Smart pointer и употребление

j> его в качестве разговорного названия boost::smart_ptr

А что за boost::smart_ptr? boost::shared_prt знаю, boost::scoped_ptr знаю, а
вот boost::smart_ptr встречать как-то не доводилось...

With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: И снова об умных указателях
От: isek Украина  
Дата: 11.10.05 06:42
Оценка:
Читал-читал про stв::auto_ptr, про boost... Всё кажется каким-то слижком уж тяжеловесным для моей задачи. Оцените, плиз, мою задумку — подскажите, кто какие грабли в ней видит!
(впрочем, раньше я с "умными указателями" не работал — может, мне мозги кто вправит — а?)

Задача:
Неопределённое количество объектов (B, C, D) хранит в себе указатели на объект A.
Так получается (у русских обычно так  :) ), что никто (ни объект А, ни кто-либо ещё) не понмит, где и сколько указателей на объект A существует. Наступает момент, когда объект А деструктируется, а кто-то обращается к нему по якобы валидному указателю (при обращении выполняется проверка, в лучшем случае, на !NULL) - и усё...
Требуется принять какие-либо меры к тому, чтобы "обезопасить код".
Главный критерий - минимальный расход памяти 
(каждый байт на счету - дело в том, что программа ворочает тьмущей тьмой данных и неосторожное добавление полей в классы повышает расход RAM на десятки и сотни мегабайт...) -
это останавливает меня в использовании выше упомянутых ауто-смарт-птэров...


Моё предложение:

При каждом объекте, на который возможны ссылки (в примере выше - объекте A) "держать" ещё одну ячейку памяти (назовём её PA) с указателем на A. Все остальные объекты (B, C, D) имеют у себя не указатель непосредственно на A, а указатель на PA (то есть, работают по двойному указателю A**). "Хозяин" объекта A, уничтожая его, обнуляет PA - и таким образом все ссылки, сколько бьы их ни было, становятся явно невалидными.



Заранее сенк за любые советы!
Re[2]: И снова об умных указателях
От: MaximE Великобритания  
Дата: 11.10.05 08:49
Оценка:
On Tue, 11 Oct 2005 10:42:15 +0400, isek <31527@users.rsdn.ru> wrote:

> Читал-читал про stв::auto_ptr, про boost... Всё кажется каким-то слижком уж тяжеловесным для моей задачи. Оцените, плиз, мою задумку — подскажите, кто какие грабли в ней видит!


[]

прочитай про boost::intrusive_ptr<>. Менее тяжеловесное решение для твоей задачи придумать сложно.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.