Не позднее как вчера попалась копипаста с умным указателем. Создавался объект и пихался в такой указатель, а потом сразу return его. Ну в общем на выходе мусор получался :)
при копировании указатель передается в копию, а исходный объект становится пустым. отсюда глупые ошибки (случайно отдал копию туда, где надо было отдать по ссылке) и невозможность хранить такие указатели в контейнерах.
>Ирония ситуации в том, что она была в нашей реализации shared_ptr для платформы, для которой нет boost Велосипеды не нужны. Что же это за платформа такая?
Смарт поинтеры не юзаю, память не теряю. stl контейнеры - да. Просто в реальном времени не юзают new / delete. Можно поиметь проблемы с фрагментацией памяти, и даже правильно написанная пара n/d приведет к кончине. В этом плане для меня был полезен небольшой опыт изучения Ada95. В приведенном примере в классе X вообще редко пишу деструкторы, так как проектируется такое только для создания, не для удаления. Если нужны очереди сообщений, то лучше использовать std::list или deque ( на самом деле, все сложнее, так как очереди мне обычно нужны для перекачивания данных из одного потока в другой, да еще без блокировок =))) Вот. Другое дело энтерпрайз, хех, но для него есть java. И лучше там врядли что-то будет, ибо CORBA сдохла, а это было единственное окошко для С++ .
Возвращаясь к теме, есть несколько вопросов I) Вот это вот scoped_ptr m_a; - оно безопасно в многопоточном применении
( ... )
> можно попытаться спроектировать свой код таким образом, чтобы свести число вызовов delete в рантайме к 0(нулю) , естественно без деградации процесса
не, ну можно вообще написать приложение без единого класса, или без использования шаблонов. если, конечно, цель стоит поставить самому себе перепонов или попасть в книгу рекордов Гиннесса :)
Comments 65
Создавался объект и пихался в такой указатель, а потом сразу return его.
Ну в общем на выходе мусор получался :)
Reply
именно поэтому его категорически нельзя использовать
Reply
Да, указатель тут же локально создавался.
Reply
Reply
(The comment has been removed)
Reply
+1000
Reply
Reply
отсюда глупые ошибки (случайно отдал копию туда, где надо было отдать по ссылке) и невозможность хранить такие указатели в контейнерах.
Reply
Велосипеды не нужны. Что же это за платформа такая?
Reply
спасибо, Кэп, за чертовски полезную рекомендацию!
> Что же это за платформа такая?
Blackfin + VDK
Reply
Если нужны очереди сообщений, то лучше использовать std::list или deque ( на самом деле, все сложнее, так как очереди мне обычно нужны для перекачивания данных из одного потока в другой, да еще без блокировок =)))
Вот. Другое дело энтерпрайз, хех, но для него есть java. И лучше там врядли что-то будет, ибо CORBA сдохла, а это было единственное окошко для С++ .
Возвращаясь к теме, есть несколько вопросов
I) Вот это вот scoped_ptr m_a; - оно безопасно в многопоточном применении ( ... )
Reply
Reply
Reply
не, ну можно вообще написать приложение без единого класса, или без использования шаблонов. если, конечно, цель стоит поставить самому себе перепонов или попасть в книгу рекордов Гиннесса :)
Reply
Leave a comment