- 1
- 2
- 3
- 4
- 5
- 6
void f_ai(intrusive_ptr<serial> i);
//...
static serial ai;
serial* ii=&ai;
//...
f_ai(ii);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+151
void f_ai(intrusive_ptr<serial> i);
//...
static serial ai;
serial* ii=&ai;
//...
f_ai(ii);
Компилируется, а потом грохается. С++ такой Си...
Lure Of Chaos 25.09.2011 19:28 # +1
что-то это мне кажется знакомым...
jQuery 25.09.2011 20:20 # +1
Uhehesh 26.09.2011 07:46 # +1
faiwer 25.09.2011 19:58 # −2
absolut 25.09.2011 20:40 # +1
Компилируемость программы не говорит о её работоспособности.
CPPGovno 25.09.2011 21:15 # −3
absolut 25.09.2011 21:16 # +5
niXman 26.09.2011 00:36 # +1
TarasB 26.09.2011 10:37 # −3
TarasB 26.09.2011 10:36 # −1
absolut 26.09.2011 11:12 # +7
TarasB 26.09.2011 11:26 # 0
absolut 26.09.2011 11:39 # 0
TarasB 26.09.2011 11:41 # −4
absolut 26.09.2011 11:42 # −1
TarasB 26.09.2011 11:50 # −3
absolut 26.09.2011 17:04 # −1
А что ты имеешь против ислама?
TarasB 26.09.2011 21:07 # 0
CPPGovno 26.09.2011 21:38 # +1
И C тоже:
gegMOPO4 27.09.2011 18:56 # 0
CKrestKrestGovno 27.09.2011 19:48 # 0
SmackMyBitchUp 27.09.2011 20:05 # 0
Люрко-знатцы, порадуйте диагнозом.
bugmenot 27.09.2011 20:42 # 0
niXman 26.09.2011 20:19 # 0
TarasB 26.09.2011 21:07 # −4
Lure Of Chaos 26.09.2011 21:11 # +1
TarasB 26.09.2011 21:30 # +1
niXman 26.09.2011 21:11 # +1
TarasB 26.09.2011 21:30 # +1
Lure Of Chaos 26.09.2011 21:39 # −1
TarasB 26.09.2011 21:41 # +2
Сидят на 17 съезде КПСС старпёры, и значит, главный старпёр читает по бумажке:
"Товаращи, я, от имени и по поручению, по заданию Партии, приехал на хуй... кхм".
Шёпот в зале - "а я же говорил, что не надо было число 17 писать римскими цифрами!"
Lure Of Chaos 26.09.2011 21:46 # +3
Lure Of Chaos 26.09.2011 19:47 # 0
absolut 26.09.2011 20:44 # +10
TheHamstertamer 27.09.2011 16:40 # −3
Нет
Lure Of Chaos 26.09.2011 12:00 # 0
TarasB 26.09.2011 12:10 # +3
Lure Of Chaos 26.09.2011 12:13 # +1
bugmenot 26.09.2011 20:30 # +1
Lure Of Chaos 26.09.2011 20:31 # 0
absolut 26.09.2011 20:45 # +2
bugmenot 26.09.2011 21:00 # +2
а не скрипты с мусоросборником
Lure Of Chaos 26.09.2011 21:12 # 0
Lure Of Chaos 26.09.2011 21:02 # +2
rat4 26.09.2011 21:37 # +1
absolut 26.09.2011 21:43 # +3
bugmenot 27.09.2011 18:47 # 0
в московской патриархии
CKrestKrestGovno 27.09.2011 18:48 # +2
CPPGovno 26.09.2011 05:59 # 0
Kirinyale 26.09.2011 12:31 # +3
Короче, ошибка здесь не в бусте, а в ДНК автора.
TarasB 26.09.2011 12:56 # −3
Kirinyale 26.09.2011 12:58 # +2
TarasB 26.09.2011 13:18 # −5
Kirinyale 26.09.2011 13:23 # +3
TarasB 26.09.2011 13:30 # −3
Kirinyale 26.09.2011 13:29 # +2
TarasB 26.09.2011 13:31 # −5
absolut 26.09.2011 13:42 # +3
TarasB 26.09.2011 13:45 # −1
absolut 26.09.2011 13:46 # +1
rat4 26.09.2011 14:26 # +7
CPPGovno 26.09.2011 15:52 # −1
Вы так говорите, как-будто чтобы научится писать на С++ - необходимо в течении 10 лет набить 100500 шишек, а только потом ты станешь писать нормально. Работодатели такого не любят.
Kirinyale 26.09.2011 16:04 # +2
Насчёт 10 лет - сроки, конечно, индивидуальны. Однако если есть голова и желание учиться, ничего лучшего, чем толковый лид, ещё не придумали. Т.к. можно 10 лет набивать шишки самостоятельно, потом 2 года набивать их же на продакшене, а потом за 1 научиться большему, чем за прошлые 12. Проверено.
CKrestKrestGovno 26.09.2011 18:25 # −1
На собственном опыте? 13 лет? ох, лол?
Kirinyale 26.09.2011 18:31 # 0
roman-kashitsyn 26.09.2011 18:34 # +5
bugmenot 26.09.2011 18:44 # +5
Lure Of Chaos 26.09.2011 19:49 # 0
надо же, а мой меня научил zx basic'у
Kirinyale 26.09.2011 19:58 # +2
Lure Of Chaos 26.09.2011 20:03 # 0
Kirinyale 26.09.2011 20:09 # 0
absolut 26.09.2011 20:49 # +5
Lure Of Chaos 26.09.2011 21:03 # 0
CPPGovno 26.09.2011 21:47 # 0
CPPGovno 26.09.2011 21:49 # +2
Lure Of Chaos 26.09.2011 22:18 # −3
А такое "всеобъемлющее" понятие, как целая философия - при многовековых попытках философов трудно создать что-то действительно непохожее.
Вот, например, давайте я попробую:
Я считаю, что всё сущее (всё, что вполне может существовать, но не встречалось) существует реально. И, к примеру, привидения и русалки тоже.
Также я уверен, что каждый индивид прав во всём, при этом создавая(или, точнее, "прикасаясь") со своим вариантом сущего.
Например, возьмём тот же древний спор о религиях, или проще: есть ли Бог или же Его нет. Так вот, кто в Него верит, для того на самом деле Он есть, а кто не верит -- никогда не увидит (варианты, зависят от "точек зрения": не узнает, нет вообще, не нужно знать).
То есть, у меня этакая "теория относительности", распространённая не только на материю. Скажите, я ведь повторяю одного или даже нескольких философов?
bugmenot 27.09.2011 01:59 # +4
дохтур, а вот ко мне давеча стая нейтринов залетела...
солипсизм же!
Lure Of Chaos 27.09.2011 16:01 # 0
gEKA6PbCKuu_nemyx 22.12.2021 12:16 # 0
CPPGovno 26.09.2011 21:46 # 0
Lure Of Chaos 26.09.2011 21:56 # 0
CPPGovno 26.09.2011 15:57 # 0
Вам надо написать книгу: "Как выучить С++, лишь захотев, за 1 день."
Kirinyale 26.09.2011 15:58 # +2
absolut 26.09.2011 21:04 # +3
Правильно. Чуть выше говорим про 1 ночь :)
carsten 01.10.2011 22:47 # +2
TarasB 01.10.2011 23:59 # −1
carsten 02.10.2011 01:52 # +1
Т.е. я имею, язык сам по себе, в отрыве от долбоёбов, которые пишут в лаба-style, не так уж плох. Успешно использую в своих проектах. Креши и утечки памяти случаются раз в месяц. Дебажу ошибки за пять минут. И т.д.
Надо смотреть в сторону тулкитов и систем подобных Qt. Стандартная библиотека и boost, имхо, действительно аляповатое overdesigned говно.
bugmenot 02.10.2011 16:40 # +2
CPPGovno 26.09.2011 15:48 # 0
Автор просто не знал, что функция f_ai принимает умный указатель. Эту функцию другой человек написал. Я же говорю, что на самом деле говно в бустеBOOST::intrusive_ptr, тк автор забыл указать одно ключевое слово при его реализации. В том же shared_ptr и прочих этой ошибки нет. Код банально не скомпилируется. Не будет никаких неявных преобразований.
>Нехрен просто использовать указатели с подсчётом ссылок для объектов, которые могут существовать не в куче.
Где автор кода использует умные указатели? Автор просто не подозревал, что их использует.
Kirinyale 26.09.2011 15:57 # 0
> тк автор забыл указать одно ключевое слово при его реализации.
Если чуточку загуглить, можно легко убедиться в том, что "constructor is implicit by design". (c)
> Эту функцию другой человек написал.
> Где автор кода использует умные указатели?
> Автор просто не подозревал, что их использует.
Ок, ошибка разработчика интерфейса (т.е. автора другой части кода). Если для объекта используется подсчёт ссылок, объект не должен удаляться никаким другим способом. Если объект не должен удаляться другим способом - нужно позаботиться о том, чтобы этого не случилось. Самый простой и безопасный способ - закрыть объекту конструктор, закрыть копирование и сделать статический метод create, создающий его на куче (и, возможно, сразу оборачивающий в указатель нужного вида). Если всего этого нет - я делаю вывод, что человек, который ввёл в своей интерфейс intrusive_ptr, не умеет им пользоваться.
CKrestKrestGovno 26.09.2011 18:44 # 0
А зачем? Что-бы случайно натыкаться на такие ошибки?
>Самый простой и безопасный способ - закрыть объекту конструктор, закрыть копирование и сделать статический метод create
Как видно, объект используется в проекте и при подсчете ссылок и без. Неоправданное ограничение вы предлагаете ввести.
Kirinyale 26.09.2011 18:53 # 0
http://lists.boost.org/Archives/boost/2005/07/90408.php
Лично мне достаточно этой аргументации + того факта, что при аккуратном использовании это попросту удобнее, чем каждый раз явно прописывать создание объекта intrusive_ptr.
> Как видно, объект используется в проекте и при подсчете ссылок и без.
А зачем? Что-бы случайно натыкаться на такие ошибки?(c)
Без дополнительной информации лично мне это кажется серьёзным просчётом архитектуры. Подобное смешение изначально небезопасно и непрозрачно (что и приводит к таким вот случайным удалениям статического объекта). И то, что оно чуть менее опасно, чем при использовании shared_ptr, этого факта не меняет. Я бы перед принятием подобного решения десять раз подумал. Наверняка можно найти более удачный выход.
CKrestKrestGovno 26.09.2011 19:06 # 0
Ну сшаред_птром так ошибиться просто не возможно. Так что не чуть менее опасно, а безопасно. Возможно ошибится, только по полному не знанию принципов работы shared_ptr. А тут реально серьёзный парень допустил такую ошибку просто по не внимательности, а не из-за незнания. Хотя может архитектуру и стоило пересмотреть. Не спорю. Но архитектуру то он не сам разрабатывал, а просто поддерживал старый код. Хорошо, что хоть ошибка обнаружилась сразу.
Kirinyale 26.09.2011 19:17 # 0
С шаред_птром при малейшем усложнении ситуации может вылезти куча другого геморроя, тянущего за собой всяческие shared_from_this и прочие извращения, которые интрузиву просто не нужны. Не говоря уже о том, что у shared_ptr гораздо больше оверхеда...
Правда, в отличие от интрузива, для него реализованы слабые указатели. Вот здесь я уже не согласен с бустовцами, считающими, что они не нужны и "не имеют смысла". Однако написать их вручную, несмотря на все их умные протесты, на практике оказалось вполне подъёмной задачей.
CPPGovno 27.09.2011 21:49 # 0
Можно несколько примеров?
Будут ли эти извращения при использовании intrusive_ptr?
>корень зла здесь всё-таки далеко не в том, что у intrusive_ptr конструктор сделан неявным
А в чем корень зла?
>Однако написать их вручную
Простите, не понял. Написать что и кем?
Kirinyale 27.09.2011 22:07 # 0
Ничего очень конкретного сейчас уже не дам, т.к. довольно давно почти не пользуюсь shared_ptr. Но гипотетический пример достаточно прост: допустим, у вас есть некий общий ресурс, с которым совершенно независимо друг от друга работают два (или больше) пользователя. Ресурс должен быть удалён, когда все они закончат с ним работать (т.е. счётчик ссылок обнулится). Предположим, один пользователь, хранящий в себе shared_ptr на ресурс, у вас уже где-то есть (или может быть), но где и какой именно - прямо сейчас неизвестно (или просто нет к нему доступа из нужной точки к коде). Как вы собираетесь корректно передать ещё один такой shared_ptr следующему пользователю? Правильно, наследуем ресурс от enable_shared_from_this, вызываем shared_from_this()... ну не извращение ли?
> Будут ли эти извращения при использовании intrusive_ptr?
Не будут. Т.к. в описанном выше примере счётчик ссылок один и хранится в самом ресурсе. Поэтому можно независимо создавать intrusive_ptr из одного и того же простого указателя хоть тыщу раз в разных местах, не заботясь о том, кто и где на него уже ссылается: пока объект существует - это безопасно. И, кстати, в отличие от shared_ptr, никогда не выделяет динамически дополнительную память под счётчик.
> А в чем корень зла?
В архитектуре, позволяющей и поощряющей использование объекта, содержащего внутри себя счётчик ссылок, так, как будто этого счётчика в нём нет и им никто не пользуется.
> Простите, не понял. Написать что и кем?
Что - слабые указатели, успешно работающие в паре с intrusive_ptr.
Кем - собой. :)
CPPGovno 27.09.2011 22:11 # 0
А чем пользуетесь? Видимо, intrusive_ptr ?
Kirinyale 27.09.2011 22:15 # 0
Kirinyale 27.09.2011 22:23 # 0
Kirinyale 27.09.2011 22:11 # 0
CPPGovno 28.09.2011 03:47 # 0
[не аргумент]"Умным может быть кто-то один - либо указатель, либо программист".
[/не аргумент]
CPPGovno 27.09.2011 22:17 # 0
А что-за протесты?
Kirinyale 27.09.2011 22:25 # +1
Явный вызов деструктора без delete (до обнуления счётчика слабых ссылок), видимо, религия не позволяет.
CPPGovno 27.09.2011 22:38 # 0
Kirinyale 27.09.2011 22:41 # +1
CPPGovno 27.09.2011 22:51 # +1
Тк за работой меньше просидишь и займешься спортом, ибо все уже сделал, или сделаешь очень много проектов, успев заработать на дорогие лекарства. (:
absolut 27.09.2011 23:11 # +1
оптимистично
SIGSEGV 26.09.2011 09:24 # +9
Lure Of Chaos 26.09.2011 12:01 # +5
Kirinyale 26.09.2011 12:33 # 0
Правило простое: пока не понимаешь - не трогай. Умнее от этого не покажешься.
TarasB 26.09.2011 12:55 # 0
Kirinyale 26.09.2011 12:57 # 0
CPPGovno 26.09.2011 16:02 # 0
Kirinyale 26.09.2011 16:06 # 0
CPPGovno 26.09.2011 16:01 # −2
carsten 01.10.2011 22:52 # +1
В остальном С++ чрезвычайно прозрачен, интуитивен и прост для меня (если не обращать внимание на синтетические примеры), и я не искренне не понимаю всего ажиотажа насчёт его необычайной сложности и запутанности.
Я, кстати, с бейсика начинал. Так что, не в языке дело, а в голове.