Всецело поддерживаю это предложение. Просто я имел в виду, что 17 это некий разумный минимум, если по каким-то причинам не использовать просто последний стандарт.
Это просто сахарок избавляющий от необходимости explicitly spell-out an exact lhs type, ну и sequence point. Больше там нет ничего, в отличие от std::make_shared.
Владеющих голых указателей лучше избегать и использовать std::unique_ptr/std::shared_ptr. Но это же дивный мир C++, ты можешь подключить какую-нибудь библиотеку, которая тебя вынудит использовать new/delete (например Qt).
Для объектов Qt да, но у них там своя машинерия внутри, *parent в конструкторах и удаление дочерних объектов в деструкторах. А для объектов и структур данных, не связанных с Qt классами, никто не заставляет использовать new и delete, и вообще это нежелательно.
Да для себя хоть на ассемблерных вставках пиши! Если на заказ, что тебе просто будет спокойнее спать, если станешь использовать умные указатели и STL - зачем зря рисковать?
Именно для нового проекта плюсы вообще не надо выбирать ни старые ни новые никакие, раз есть такая возможность, ради чего вообще? Язык активно коболизируется, чтобы ты там ни писал, с высокой вероятностью будет на выброс
Имхо, «не так страшен чёрт как его малютка». И вообще, если мы о правилах заговорили - единственное которому я неукоснительно следую: «write what you know, know what you are writing». А все эти насильно навязанные политики на тему умных указателей - от лукавого. Вот скажите ещё что ни разу в жизни «delete this» не приходилось делать…
А что там такого в C++11 довели до ума для ООП? Это ж прежде всего способ мышления, взгляд на мир, редко скованный какими-то языковыми особенностями. Экстремально позднее связывание, передача сообщений, сохранение состояния — что кардинально нового сюда принёс C++11?
Это не просто какой-то там сахарок, а сахарок, который вычищает код от говна. Дальше достаточно простейшего текстового поиска и на руках почти полная гарантия отсутствия утечек. История почти как с неуловимыми сишными кастами и их более продуманные аналоги reinterpret_cast/const_cast/…
Что промелькнуло у меня из этого документа на экране про указатели и RAII, то выглядит логично. Действительно, сырые указатели иногда необходимы. Даже в расте их практикуют (в виде ссылок, но с проверяемым временем жизни. Проверка дает оценку сверху, но все же хоть что-то)
Вообще, как много языков можете назвать, для которых были написаны гайдлайны? Гайдлайны по тому, как надо писать, и как не надо. Я вот помню одну старую книгу про то, как избегать «ошибок на фортране».
Итого получаются C++ и фортран. Есть еще кандидаты в этот великолепный список?
Сразу бери максимально свежий стандарт, поверь, там постоянно появляются штуки, которые действительно делают жизнь проще. Возможно не хватит опыта это оценить и некоторое время будешь писать говно, а новые стандарты как пятая нога. Читай всякие C++ Core Guidelines, там есть весьма дельные советы, озарение придет быстрее
Забавно что самый популярный C++ фреймворк (это Qt конечно же) до сих заставляет писать код с new и редко с delete.
«Вы не понимаете, это другое!». А по факту всё всегда решает
грубая сила — если нет силёнок написать аналог какой-нибудь
мощной библиотеки, то утираются со всеми своими моднявыми штучками
и тихо юзают ненавистное «легаси».
Имхо, «не так страшен чёрт как его малютка». И вообще, если мы о правилах заговорили - единственное которому я неукоснительно следую: «write what you know, know what you are writing».
bugfixer ★★★★★ (29.08.25 19:34:32 MSK) «write what you know, know what you are writing»
Прям new / delete я бы не стал. Есть умные указатели. Но для вызовов функций, типа в качестве а-ля ссылки можно, т.е. когда есть умный указатель на объект A и нужно дать его попользоваться (без передачи владения) в объект B.
Я бы начал с последнего стандарта. Что такое голые и не голые указатели, я не знаю. new/delete я избегаю, лучше статически выделить всё, что надо. Но если иначе никак - придётся кучей пользоваться..
Настоящие_Программисты(TM) если меняют исполняющее устройство - за здают в архив все рулоны сырцов на старое устройство и пересоздают сырцы для нового исполняющего устройства с учётом обновлённых технических требований и накопленных эвристик и инсайтов - как результат по мере удешевления вычислений снижаются требования к памяти хранения и памяти исполнения