0xd34df00d
15.02.2012 09:07 Azoth_primary
Лол, похоже, в QSharedPointer не осилили стирание типов. Еще один аргумент в пользу std::shared_ptr.
Лол, похоже, в QSharedPointer не осилили стирание типов. Еще один аргумент в пользу std::shared_ptr.
что за стирание типов?
Это чтобы в точке инстанциирования самого смартпоинтера не нужно было полное объявление класса для корректного вызова его деструктора.
я не сиплюсплюсник, но объясни, зачем юзать кутишный или бустовский shared_ptr, если он есть в std?
Потому что в std он есть недавно. Олсо, я поэтому и написал про std::shared_ptr.
он там совсем недавно появился
шаред-пойнтер — ошибка архитектуры
Олсо, ряд Qt-упорышей фанатично кричит про кутишные смартпоинтеры разных видов, типа, для консистентности.
ты умеешь объяснить так, чтобы нихуя не было понятно. Что такое "инстанциирование"?
Нет.
да
в общем, QSharedPointer не осилил виртуальные деструкторы, да?
std::shared_ptr<Shit> MyShit_; // здесь мы инстанциировали шаблон шаред_птра типом Shit.
С шаред_поинтером можно написать, например, в хедере так:
class Shit;
std::shared_ptr<Shit> MyShit_;
а заинклюдить определение Shit'а только в .cpp, и все равно деструктор вызовется правильно и корректно. С другими смартпоинтерами такого не бывает — например, auto_ptr/unique_ptr требуют полного определения класса в точке инстанциирования себя, а не в точке инстанциирования своего деструктора.
нет. QSharedPointer просто не умеет работать с incomplete типами
Не совсем. Он не осилил forward declaration'ы, если уж об этом говорить.
вообще не понимаю, как это можно не осилить
Манда.
Окей, набросаешь за 10 минут смартпоинтер, который это осилит?
затролел
нет ты
Нет, серьезно. Нахрена ручное управление временем жизни объекта, когда стратегия «кто последний, тот и папа^W убивает» вполне подходит?
ну в смысле сначала объявляешь метод. Потом где-то там, за пределами описания класса, пишешь код для метода. Это есть forward declaration? Или что?
-_________\\\
Форвард декларайшн типа. Это когда пишешь class Shit;, чтобы компилятор знал, что такой тип вообще есть, но не знал, что там внутри.
Ггг. Тоесть ты не представляешь, как то можно не осилить, а сам даже не представляешь, что это такое?
а я это и спрашиваю, разве нет?
у меня от тебя верехуман!
Это тоже fwdecl, но нужно различать function forward declaration и class/type forward declaration.
В общем, иди пиши на п-тоне, плюсцы не для тебя :3
отвечай на мой ответ
затем что внезапно этих последних может оказаться не один. ты будешь работать с объектом то через одного «папу», то через другого, а потом окажется, что они на два разных объекта указывали. + шаред пойнтеры требуют локов при работе со счётчиком ссылок, а это говно
поэтому его и не взяли плюсоебом
//_\\
Дададад.
это не те forward declaration которых мы ищем
это у всех плюсоёбов чсв непомерно высокое, или это мне так не повезло столкнуться с вами?
ЧЕ
Какие, блядь, два разных объекта, работать — через другого. Ты че несешь вообще? Ты можешь заткнуться? Вообще охуеть.
Нет, мы просто любим издеваться над неосилившими плюсцы :3
давайте, докажите друг другу, что вы все не шарите
это как если бы они научились вырезать лазером опухоли, а потом работали этим же лазером, выпиливая блестящие номерки на двери.
ну, проблемы велосипедов с квадратными колёсами их не беспокоят, это давно известно
А вот это хорошо, что умеет.
Личкрафты на него переходят в качестве дефолтного стандарта?
ТАМ КУДА МЫ ОТПРАВИМСЯ КОЛЁСА НЕ НУЖНЫ
давно уже
это у меня. а дедфуд на меня ориентируется
А я, как мудак, из буста их тащу -_-
Итак, вечер рефакторинга
Они и так по дефолту были на shared_ptr, просто из буста.
Ну да. Теперь можно отключать буст и оставлять std.
мне вообще нравится, как вы положили болт на стабильные версии конпелятора
ещё один всё понял
Че. Мы ориентируемся на gcc 4.5 сейчас.
мне тоже. я продолжаю насиловать C++03
есть ещё 4.4, который много где используется
Да и похуй же. В генте 4.5 и ниибёд.
Например?
Уже даже в доебане тестинге 4.6. Как в генте 4.6 размаскируют, перейду на него — хотет range-based for!
в RHEL6 4.2, емнип. в FreeBSD 8 тоже
+1
Ну, они соснули.