Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
А "решение" основанное на перегрузке new/delete - выкинуть к е...ням. Черта с два оно безопасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 00:03 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Не, я реально не понимаю, что же человеку надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 01:10 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
MasterZivНе, я реально не понимаю, что же человеку надо... А что тут непонятного? Перед нами ситуация, когда человек уровня в лучшем случае джуниора занимается дизайном архитектуры, и при этом судя по всему является тем, кто принимает окончательные решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 01:43 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
MasterZivНе, я реально не понимаю, что же человеку надо... На данный момент все решено и сузилось до этой задачи Код: plaintext 1. 2. 3. 4. 5. 6. PS. И ещё вы намекали, что в этой схеме есть какие-то риски использования шаредов и поэтому их требуется "законтролить"... что имелось ввиду я так и не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:03 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПеред нами ситуация, когда человек уровня в лучшем случае джуниора занимается дизайном архитектуры, и при этом судя по всему является тем, кто принимает окончательные решения. Все это так!! только про джуниора не понятно)))... может быть настоящих джуниоров давно не видели? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:09 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто требование бессмысленно. Не надо вообще работать с new и голыми указателями. Смартуказатель предоставляет АПИ для всех необходимых операций с указателем и объектом. Голые указатели отдают функции, которые мы не контроллируем. Я согласен, что их надо завести под шареды, но пользователи не будут этого делать сами. Эта упаковка должна происходит автоматически, поэтому и возник вопрос как можно спрятать эту операцию в оператор =() Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:14 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
LumixAnatoly MoskovskyЭто требование бессмысленно. Не надо вообще работать с new и голыми указателями. Смартуказатель предоставляет АПИ для всех необходимых операций с указателем и объектом. Голые указатели отдают функции, которые мы не контроллируем. Я согласен, что их надо завести под шареды, но пользователи не будут этого делать сами. Эта упаковка должна происходит автоматически, поэтому и возник вопрос как можно спрятать эту операцию в оператор =() Код: plaintext 1. 2. 3. Оценка личности не самое первое дело, конечно, но вы столько шуму делаете из стандартной типовой ситуации , более того совершенно не пытаетесь понять что вам втолковывают, что и привело, к тому, что ваше внимание обратили на ваш уровень, в свою очередь, чтобы вы наконец задумались над тем что вам говорят. Кроме того, у вас хромает логика, это следствие плохого понимания того что вы делаете. Например: Код: sql 1. вы называете идеальным вариантом, в то время, как вам он на самом деле представляется "не идеальным", так как идет работа с raw-указателями. Понятно, что имеется в виду форма записи, но форма не может существовать без содержания, в этом у вас и противоречие - надо именно так, да и не так вроде. А ситуация действительно типовая, есть фабричные функции возвращающие "опасные" указатели, надо всего-то обернуть их в безопасные, то есть написать кучу оболочек для этих фабричных функций: Код: sql 1. , а не придумывать грабли с неявным преобразованием, пытаясь превратить программирование на плюсах в программирование на javascript (для ваших "клиентов"). Кстати в этом я вижу корень ваших проблем судя по топикам, вы не можете четко осознать что плюсы это не GC-ruled язык, в том смысле что здесь не нужно скрывать с чем вы имеете дело под мусором неявных преобразований, более того, нужно наоборот как можно более четко давать понять какие объекты языка фигурируют в данной строчке кода. Об этом вам тоже не раз сказали и показали как это сделать. В данном случае советую прежде всего спокойно сделать то что вам советуют, только затем подумать и просветлиться, а если нет то задавать вопросы. ps. То как вы инициализируете синглтон тоже вызывает вопросы, но это другая тема, где тоже можно делать много шума из ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:51 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
MasterZiv, по поводу рисков использования шаредов мне в соседней ветке объяснили 13624428 Похоже, что использование ссылок на шареды полностью закрывает риски, о которых вы говорили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 11:55 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
sherzod_столько шуму делаете из стандартной типовой ситуации поймать перезапись указателя, а это и была тема этой темы, оказалось не то, что типовой ситуацией, а вообще принципиально невозможной, поэтому пришлось использовать умные указатели в форме шаредов, чтобы использовалось автоматическое затирание объектов в памяти, которые стали недоступны при перезаписи указателя b().reset((B*) new A) задача решилась, все круто и теперь остался последний шажок, как это спрятать под капот в форму b() = new A; но для этого я создал отдельную тему 13624428 по большому счету эту тему уже можно закрывать, так как ответ в ней уже найден: чтобы поймать факт перезаписи надо использовать шареды, причем со ссылкой а как теперь спрятать этот кастинг под капот, это решение я ищу в соседней ветке sherzod_более того совершенно не пытаетесь понять что вам втолковывают чтобы вы наконец задумались над тем что вам говорят Я прилагаю максимум усилий, чтобы понять решения, которые мне предлагают, но разумеется я игнорирую любые попытки подменить задачу и контекст. sherzod_Кроме того, у вас хромает логика, это следствие плохого понимания того что вы делаете. Например: Код: sql 1. вы называете идеальным вариантом, в то время, как вам он на самом деле представляется "не идеальным" Вам кажется, что у меня хромает логика по одной простой причине, что вы верите, что существует некое на самом деле . Я это называют попыткой сменить задачу или контекст. Как известно любому образованному человеку, любая логическая система, будучи непротиворечива сама себе, всегда содержит в себе критерий, который недоказуем средствами системы и поэтому для носителя такой логической системы этот критерий остается незамеченным. Чем-то это похоже на запах в центре йоги, который мы не замечаем, когда находимся там некоторое время, но сразу же замечаем, как только вошли с улицы. Так и вы: у вас какие-то внутренние критерии-аксиомы, к которым вы привыкли за долгие годы и просто уже не замечаете, но эти критерии продолжают оказывать влияние на ваши выводы в отношении логических систем других людей, например, моей логики и она кажется вам хромающей. А кроме того, для некоторых спецов часто актуальна проблема профессиональной гордости, которая проявляется в существовании лишь двух вариантов исходов ситуации: либо я знаю как решить, либо задача ошибочная. Вариант, я не знаю как решить для таких спецов исключен. sherzod_А ситуация действительно типовая, есть фабричные функции возвращающие "опасные" указатели, надо всего-то обернуть их в безопасные, то есть написать кучу оболочек для этих фабричных функций: Код: sql 1. , а не придумывать грабли с неявным преобразованием, пытаясь превратить программирование на плюсах в программирование на javascript (для ваших "клиентов"). Ремарочка: не знаю насколько эта задача типовая, но в викидеии на анлийском языке примеров фабричного метода не существует, что как бы намекает на "типовой" характер...))) Если бы наша команда решала бы все свои задачи явными преобразованиями, то наш код верхнего уровня превратился бы в дерьмо, потому что джуниоры потеряли бы предметный код среди обслуживающего. Я для того и существую, чтобы джуниоры работали над предметной конкретикой и не лезли бы под капот. sherzod_Кстати в этом я вижу корень ваших проблем судя по топикам, вы не можете четко осознать что плюсы это не GC-ruled язык Я это отлично понимаю и в наших проектах нет ни одного сборщика мусора!! Мне тут один товарисчщ чуть выше уже пытался подкинуть вирус, что типа деструктор это лайтверсия GC, но я отказался расширять логический контекст. sherzod_в том смысле что здесь не нужно скрывать с чем вы имеете дело под мусором неявных преобразований, более того, нужно наоборот как можно более четко давать понять какие объекты языка фигурируют в данной строчке кода. У слова нужно всегда есть субъект. Всегда есть тот кому нужно. Если вам не нужно, то ради бога. А конкретно нам нужно. Мы это не вы. И вы похоже об этом забываете. Я знаю людей, которые очень настойчиво будут вам объяснять, что пиво нужно пить только с водкой и вы никогда их в этом не переубедите, а если вы будете настаивать, то все может закончится очень печально. Поэтому очень важно помнить, что у вас свои нужно, а у нас свои нужно. sherzod_Об этом вам тоже не раз сказали и показали как это сделать. "Об этом" это о чем?? и какой конкретный пример вы имеете ввиду?? Я обработал все примеры этой ветки. sherzod_В данном случае советую прежде всего спокойно сделать то что вам советуют Какой конкретный совет, решающий мою задачу вы имеете ввиду?? номер поста можете привести?? sherzod_ps. То как вы инициализируете синглтон тоже вызывает вопросы, но это другая тема, где тоже можно делать много шума из ничего. Мне в этой теме инициализация тоже ни разу неважна, я даже не обращаю на это внимание, что там написано. Мое внимание занимает лишь одна строчка пользовательского уровня и решение для неё я и ищу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 12:41 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
На хабре пишут про проблему циклических ссылок. Кто-то сымитировал это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 12:51 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Lumix, вас немного разносит по-моему. В "сотый" и последний (от себя) раз повторяю вам две простые вещи, вы можете долго составлять различные сочетания умных слов тренируясь в комбинаторике и плодя топики, но неизбежно к ним придете, если будете идти быстро (больше думать, и меньше говорить). Код: plaintext 1. 2. * Не фабричным методом, такого понятия не существует в с++, за пояснениями - в стандарт, книги, в комитет и в др. авторитетные источники, так как не очень приятно объяснять тому кто не слушает. ** Заранее согласен что у вас есть свой взгляд на вещи, можете делать по своему, эти два совета - всего лишь советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 13:29 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
LumixГолые указатели отдают функции, которые мы не контроллируем. Я согласен, что их надо завести под шареды, но пользователи не будут этого делать сами. Так просто возвращай эти указатели, и всё. Если боишся, что пользователь выдернет указатель из смарт указателя, вообще перепиши его так, чтобы не было доступа прямого к нему (сделай свой вариант смарт указателя) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 14:21 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
maytonНа хабре пишут про проблему циклических ссылок. Кто-то сымитировал это? А чё тут имитировать ? И это вовсе не проблема. Это проблема для универсальных GC, когда они действуют вне логики работы приложения и не знают о ней. А когда пишеш руками сам, всегда есть возможность разорвать цикл и те же SharedPtr будут замечательно работать. Смартпоинтеры работают всегда внутри логики работы приложения, в этом их плюс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 14:26 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Не, я не понимаю, что ж ему надо и зачем. И что-то я уже потерял нить ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 14:30 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
MasterZiv, я вот думаю, может подобные дискурсы переносить в ПТ. Там и юмор и контингент особый. Готовый ко всему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 14:53 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
MasterZivНе, я не понимаю, что ж ему надо и зачем. И что-то я уже потерял нить ... Тему уже можно не читать, все давно решено. Просто подскажите насколько безопасно, если я прикручу к shared_ptr перегруженный оператор =, чтобы в нем производить операцию даункастинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 15:28 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
есть у меня ещё запасной вариант, если решение с оператором равно найти не удастся но этот вариант не компилится из-за динамик каста... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 15:55 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
LumixГолые указатели отдают функции, которые мы не контроллируем. Я согласен, что их надо завести под шареды, но пользователи не будут этого делать сами. Эта упаковка должна происходит автоматически, поэтому и возник вопрос как можно спрятать эту операцию в оператор =() Код: plaintext 1. 2. 3. Автоматически - не выйдет. Юзер должен будет явно преобразовать в смарт. Вы ему можете помочь сократить кол-во буквочек: Код: plaintext 1. 2. 3. 4. 5. 6. Только помните, что shared_ptr это совместное владение и удаляет объект последний оставшийся владелец. Т.е. голый указатель (точнее его объект), который вы получаете из внешних функций, не должен потом удаляться другим способом чем через созданный shared_ptr (в том числе и через другой shared_ptr, не являющийся копией этого). Из этого следует например то, что та внешняя функция которая возвращает голые указатели не должна возвращать один и тот же указатель более одного раза. Т.е. она каждый раз должна создавать новый объект. Но у вас судя по всему и так создаются новые объекты, раз вы озаботились их удалением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 16:39 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyАвтоматически - не выйдет. Юзер должен будет явно преобразовать в смарт. Вы ему можете помочь сократить кол-во буквочек: Код: plaintext 1. 2. 3. 4. 5. 6. вместо to_shared() я принял решение дать ему перегруженный аксесссор Anatoly MoskovskyТолько помните, что shared_ptr это совместное владение и удаляет объект последний оставшийся владелец. Т.е. голый указатель (точнее его объект), который вы получаете из внешних функций, не должен потом удаляться другим способом чем через созданный shared_ptr (в том числе и через другой shared_ptr, не являющийся копией этого). сейчас у нас удаление происходит через delete b(); но если мы переведем все на шарепоинты тогда delete перестанет работать и придется весь код переписывать на b().reset() я сейчас думаю над этим вопросом... b() у нас всегда ссылка, и разумеется delete b(new B) исключены Anatoly MoskovskyИз этого следует например то, что та внешняя функция которая возвращает голые указатели не должна возвращать один и тот же указатель более одного раза. Т.е. она каждый раз должна создавать новый объект. Но у вас судя по всему и так создаются новые объекты, раз вы озаботились их удалением. а из-за шарепоинтов у нас сейчас получается указателей-то вообще нет ни одного... типа теперь все аксессоры возвращают поинтеры поинтеры появились на сцене чтобы b(1) = b(2) не создавало утечек с b(1) но теперь потерялась возможность делать delete b() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 16:59 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Все, нет сил смотреть на это - я сдаюсь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:44 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Lumix, а ты что-нибудь писал на managed C++, на C# или Java ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 18:49 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВсе, нет сил смотреть на это - я сдаюсь :) Анатолий, на всякий случай, если я не появлюсь на этом форуме до нового года, мне хотелось бы поздравить вас с наступающим, потому что вы и МастерЗив мои самые любимые персонажи на С++ ветке sql.ru Спасибо за классное общение!! Желаю вам в наступающем году змеи быть изворотливым и хитрым ради собственных интересов. Ну и здоровья конечно!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 20:51 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
maytonLumix, а ты что-нибудь писал на managed C++, на C# или Java ? У нас нетбинс, mingw, винда/линь/макос, пхп и js. Других технологий нету. Команда ещё ждет, когда я наконец-то скажу мяу по поводу иоса и ведроида, но че-то я пока не созрел... Кстати, не последнюю роль в том, что я пока жду - это отсутствие раздела на sql.ru Даже sharepoint есть, а иоса и андроида нету... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 20:59 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
Lumix, просто... может С++ это не твоё? Думал об этом? Если уж так тяжело даётся дружба с системным языком (а он действительно близок с системному а не прикладному) то зачем насиловать себе мозг? Кроме того по постам - у тебя гуманитарный склад ума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 12:18 |
|
||
|
Поймать факт перезаписи
|
|||
|---|---|---|---|
|
#18+
maytonLumix, просто... может С++ это не твоё? Думал об этом? Думал конечно. Думал на шарп перевести команду или на яву. Но ведь это проприетарные платформы и никогда не знаешь что с ними станет. Ещё я со всякими умными дяденьками советовался, которые к нам в екб приезжали и они сказали, что в условиях современного мира С++ будет только развиваться, что мода на него ещё придет. Кроме того, важно понимать, что мозг придется напрягать в любом случае, даже в том же шарпе или в яве и глупо думать, что там все медом мазано. К тому же у нас уже есть наработки, есть команда, есть опыт в с++ maytonЕсли уж так тяжело даётся дружба с системным языком (а он действительно близок с системному а не прикладному) то зачем насиловать себе мозг? Мы его используем 100% как прикладной инструмент, который позволяет создавать а) бинарники, б) кросс-платформенный код. Ну помучился я пару дней с памятью, ну вник я в эти заморочки с кастингом и указателями, ну доработаю я эти аксессоры и все, сдал в продакшен и этим можно пользоваться на трогая и не вникая. То есть эти мучения носят разовый характер. maytonКроме того по постам - у тебя гуманитарный склад ума. Да, склад ума гуманитарный, это не вызывает сомнений, но мне кажется, что мастерство программирования очень много содержит в себе именно гуманитарных талантов, требует хорошего воображения и чувства стиля. К тому же у меня есть совершенно дикая мечта, которую я пока не знаю как реализовать... мне хотелось бы выучить хаскель настолько, чтобы можно было обучить команду джуниоров производить продукты, востребованные рынком. Я уже три раза делал заход на хаскель, но как обучить ему джуниоров я так и не допер... А на с++ я джуниора, который знает пхп, спокойно могу за пару месяцев научить и он начнет справляться с задачами из нашего багтрекера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 16:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38077738&tid=2020561]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 160ms |

| 0 / 0 |
