Возвращаясь к теме

Jan 28, 2011 10:13

В статье про ужасы "виртуального удаления", естественно, проскочила и тема умных указателей ( Read more... )

c++, programming

Leave a comment

Comments 65

ti_ua January 28 2011, 08:19:59 UTC
Не позднее как вчера попалась копипаста с умным указателем.
Создавался объект и пихался в такой указатель, а потом сразу return его.
Ну в общем на выходе мусор получался :)

Reply

cd_riper January 28 2011, 08:23:52 UTC
ты про auto_ptr?
именно поэтому его категорически нельзя использовать

Reply

ti_ua January 28 2011, 08:27:11 UTC
Нет, какой-то свой для внутреннего пользования.
Да, указатель тут же локально создавался.

Reply

cd_riper January 28 2011, 08:38:42 UTC
ааа... в return совался голый указатель на объект, я понял

Reply


(The comment has been removed)

cd_riper January 28 2011, 08:37:55 UTC
да, блядь, я экстрасенс, мать твою еб!

Reply

ti_ua January 28 2011, 08:39:59 UTC
АХАХАХА :)))

+1000

Reply


jamdiver January 28 2011, 08:46:08 UTC
А можно плз вкратце про недостатки auto_ptr?

Reply

cd_riper January 28 2011, 08:52:49 UTC
при копировании указатель передается в копию, а исходный объект становится пустым.
отсюда глупые ошибки (случайно отдал копию туда, где надо было отдать по ссылке) и невозможность хранить такие указатели в контейнерах.

Reply


mbr January 28 2011, 08:48:00 UTC
>Ирония ситуации в том, что она была в нашей реализации shared_ptr для платформы, для которой нет boost
Велосипеды не нужны. Что же это за платформа такая?

Reply

cd_riper January 28 2011, 08:53:58 UTC
> Велосипеды не нужны.

спасибо, Кэп, за чертовски полезную рекомендацию!

> Что же это за платформа такая?

Blackfin + VDK

Reply


ext_290530 January 28 2011, 09:38:36 UTC
Смарт поинтеры не юзаю, память не теряю. stl контейнеры - да. Просто в реальном времени не юзают new / delete. Можно поиметь проблемы с фрагментацией памяти, и даже правильно написанная пара n/d приведет к кончине. В этом плане для меня был полезен небольшой опыт изучения Ada95. В приведенном примере в классе X вообще редко пишу деструкторы, так как проектируется такое только для создания, не для удаления.
Если нужны очереди сообщений, то лучше использовать std::list или deque ( на самом деле, все сложнее, так как очереди мне обычно нужны для перекачивания данных из одного потока в другой, да еще без блокировок =)))
Вот. Другое дело энтерпрайз, хех, но для него есть java. И лучше там врядли что-то будет, ибо CORBA сдохла, а это было единственное окошко для С++ .

Возвращаясь к теме, есть несколько вопросов
I) Вот это вот scoped_ptr m_a; - оно безопасно в многопоточном применении ( ... )

Reply

cd_riper January 28 2011, 09:49:11 UTC
> Смарт поинтеры не юзаю, память не теряю ( ... )

Reply

ext_290530 January 30 2011, 21:34:45 UTC
// > Смарт поинтеры не юзаю, память не теряю ( ... )

Reply

cd_riper January 31 2011, 04:49:28 UTC
> можно попытаться спроектировать свой код таким образом, чтобы свести число вызовов delete в рантайме к 0(нулю) , естественно без деградации процесса

не, ну можно вообще написать приложение без единого класса, или без использования шаблонов. если, конечно, цель стоит поставить самому себе перепонов или попасть в книгу рекордов Гиннесса :)

Reply


Leave a comment

Up