LINUX.ORG.RU

Какие нужно провести эксперименты со смартпоинтерами чтобы они стали родными?

 


0

2

Я сейчас хочу вернуться к Си++, но довольно давно профессионально на нём не писал. Обложился книжками, читаю. Это всё мило и забавно, но недостаточно.

Мой «родной» стандарт – 98. Застал масштабный переход на 11й, но то такое…

Есть какой-то набор упражнений\экспериментов чтобы пощупать смертпоинтеры во всём их разнообразии?

Да и по другим пост-98 темам тоже интересно.

Просто начать что-то писать? Ну так 99% использований будет совершенно тривиальным и многому я не научусь. Да и прямо сейчас мне ничего писать не нужно…

Я сейчас хочу вернуться к Си++, но довольно давно профессионально на нём не писал.

Ну и нафига тебе оно? с++ на текущий момент далёк от времён расцвета.

Мой «родной» стандарт – 98

Я думаю, для многого коммерческого/ентерпрайзнутого кода этого будет более чем достаточно.

Просто начать что-то писать?

Просто устройся на работу там всему и научишься. Прото читать книжки без применения, желательно коммерческого/публичного опенсорсного это просто потратить время в пустую.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Я думаю, для многого коммерческого/ентерпрайзнутого кода этого будет более чем достаточно.

Сейчас в большинстве вакансий требуют как минимум 17, а то и что-нибудь поновее.

annulen ★★★★★
()
Ответ на: комментарий от vtVitus

Просто устройся на работу там всему и научишься.

Чтобы просто устроиться на работу нужно просто пройти собеседование. А современные собеседования напоминают сдачу экзаменов ненавидящему тебя преподу. Так что никто мне не даст возможность актуализировать навыки «в процессе».

tempUser
() автор топика

Только лишь постановка вопроса говорит о том что ты делаешь что-то (всё) не так. Смартпоинтеры это настолько простейшая и незначительная (и при этом не особо-то часто использующаяся) часть языка, что если идет речь об изучении прицельно их, то очевидно что ты не знаешь язык вообще, даже на уровне 98 стандарта. Поэтому вопрос должен стоять «как изучать C++ с нуля». А ответы тут уже миллион раз приводили.

anonymous
()
Ответ на: комментарий от tempUser

А современные собеседования напоминают сдачу экзаменов ненавидящему тебя преподу

Внезапно, считают что преподы их ненавидят только конченые лодыри и лентяи. В преподавании нет ни денег, ни славы, ни даже благодарности - туда идут только чтобы учить, а не кто учат ненавидеть тех кто учится просто не могут. А вот в студентах оказываются случайные люди, которые пришли «потому что все идут», потому что «без образования никуда», «чтобы не в армию», «чтобы не на завод», чтобы испить духа свободы, и т.д. чуть менее чем всегда, а из тех кто таки приходит учиться, лишь малый процент осознанно выбирает интересную себе специальность и подходящий вуз.

То же и в «айтишке», кстати.

Так что просто осознай что родность смартпоинтеров тебе никак на собеседовании не поможет, на собеседовании нужно уметь программировать, и знание стандартов и конструкций языка в этом дело даже не десятое. Поэтому отложи книжки и пиши код, в книжки будешь лазить когда поймешь чего тебя оттуда не хватает.

anonymous
()

не заморачивайся этими смартпоинтерами. не видел ни одной либы, что их бы показывала в интерфейсах.

в 90++ процентах случаев архитектура такова, что передаются не поинтеры, не смартпоинтеры, а ссылки. указатели используются в специальных случаях, и только часть из них еще как то возможно нуждается в смартах.

стандартная либа скорее претендует на полноту, чем на удобство. ходовые шаблоны оттуда - string, vector, map, list, unique_ptr(иногда полезен).

для многопотока - thread, mutex(всякие разные), cond_var, atomic.

для работы с фс завезли std::filesystem

для ввода-вывода - потоки всякие.

вверагающие в шок многоэтажные шаблоны в примерах в инете, это происки фриков, замороченных александреской с детского горшка.

зы. смарты нужны для эксепшенов, если предполагается не ронять программу, а продолжать. тогда раскрутка стека при исключении правильно уничтожит или изменит счетчик ссылок у затронутых обьектов.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 2)

Я сейчас хочу вернуться к Си++, но довольно давно профессионально на нём не писал

зачем врать? никогда ты на нём не писал если не понимаешь зачем нужны смартпоинтеры. если что, 98 отличается от 23 не тем что их тогда не было, а тем что их приходилось писать самому. и все писали. и ты писал бы. если бы писал профессионально на плюсах.

Обложился книжками, читаю

да-да, а я довольно давно на велосипеде не катался, теперь вот сижу боковые колёсики прикручиваю.

Да и прямо сейчас мне ничего писать не нужно…

это значит что ты, во-первых, не любишь программирование, во-вторых, не имеешь острой нужды в него идти, иначе бы занимался и тем что не любишь. а раз так, то не трать время - занимайся тем что нравится, или на диване валяйся.

anonymous
()

Обложился книжками, читаю

не надо так делать, по плюсам нет ни одной хорошей книжки. Все что они могут - это засрать тебе мозги всякой хренью, типа вот этих смартпойнтеров. Без которых в 95% случаев можно обойтись, если нормально заранее продумать архитектуру программы, которую пишешь.

Единственный правильный путь - это писать код, без изысков и по рабоче-крестьянски, потом открывать https://en.cppreference.com/w/ и смотреть, что оттуда может помочь тебе сделать код более читаемым, выразительным и т.п., и какой ценой. Еще пропозалы полезно читать - там явно пишут, что чего вводится та или иная фича.

Lrrr ★★★★★
()

Есть какой-то набор упражнений\экспериментов чтобы пощупать смертпоинтеры во всём их разнообразии?

Ну... раньше std::auto_ptr был один, как обычно все выдрючивались кто в лес, кто по дрова: в некоторых кодовых базах в годовых кольцах разбросаны эти их «упражнения в экскрементах» вида велосипедов auto_ptr2, auto_ptr3, подпертых костыляме из boost: shared_ptr, scoped_ptr, weak_ptr... которое все примерно стало нинужно с появлением c++11. Осталось понять разницу между std::unique_ptr и std::shared_ptr и зачем им костыли в виде std::make_unique и std::make_shared, когда без них никак, а когда... они больше не роляют. С целью обидного смеха над одептами заучивания костылей, конешшно. А лучше понять RAII, move семантику и главное - когда смартпойнтеры не нужны.

slackwarrior ★★★★★
()
Ответ на: комментарий от anonymous

не понимаешь зачем нужны смартпоинтеры

Я понимаю зачем. Меня интересует список нюансов где нужно быть аккуратным (и почему) в текущей их стандартной реализации.

tempUser
() автор топика
Ответ на: комментарий от tempUser

Самые главные отличия: в C++11 придумали закостылять move-семантику как самостоятельную сущность языка, вместо move-семантики на шаблонах, сделать определенные действия UB, которые таковыми не были в C++98, перенести в STL множество библиотек из Boost C++ Libraries, range-based for вместо макросов вроде BOOST_FOREACH, enum class появился, вариативные шаблоны (это как функции с бесконечным количеством аргументов в Си, только для аргументов шаблона), ключевое слово constexpr.

Короче требуха, особо не виляющая на процесс написания программы. За несколько вечеров можно разобраться.

zx_gamer ★★★
()
Ответ на: комментарий от alysnix

смарты нужны для эксепшенов

Смарты много где нужны. Например, менеджер некоторых объектов, который раздаёт их по запросу, возможно удаление контролируемых объектов. Без шаред_птр - это будет ручная дрочь с дескрипторами и обязательным их освобождением аля ОС апи. Шаред_птр сильно удобнее. Вообще надо смотреть на программиста очень осуждающе, если он где либо использует new/delete вместо make_shared/…_unique (если это совсем не низкоуровщина и не placement new). Можно прям грепнуть проект, и в случае чего обозвать говнокодером

anonymous
()

Есть какой-то набор упражнений\экспериментов чтобы пощупать смертпоинтеры во всём их разнообразии?

Для начала научиться пользоваться std::move..

anonymous
()

Самое первое с чего надо начинать — разобраться с понятием «value category».

Затем, разобраться с понятиями «declaration» и «definition».

Всё это существовало и в C++98. Но тогда такие подробности можно было тупо игнорить за ненадобностью. Сейчас это не так.

anonymous
()