2009-05-04 2 views
1

C++ проделал долгий путь, у него есть много функций, которые приводят к выполнению одной и той же задачи в n числе способов. Какую функцию, по вашему мнению, следует избегать и перечислить лучшую альтернативу для нее.Лучшая альтернатива для старой функции C++?

Как используют SmartPointers в местах указателей

+1

Пожалуйста, создайте сообщество wiki - это не настоящий вопрос –

+0

done.I спрашиваю для таких вещей, как использование Smartpointer в местах указателей – yesraaj

+3

Это реальный вопрос для людей, которые приходят из C или даже из более старшего стиля C++ – tpdi

ответ

15

Избегайте таНос, используйте новый.

Избегайте memcpy, используйте конструктор копирования.

Избегайте #defines, используйте const s.

Avoid (C-style) casts, use static_cast<C++>(style casts).

Избегайте макросов, использование шаблонов.

Избегайте пост-приращения, если вы можете использовать предварительный приращение.

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

Избегайте указателей на new'd объектов используйте boost::scoped_ptr или boost::shared_ptr.

не писать свой собственный код для обхода коллекции, используйте <algorithm> сек

не изобретать колесо, увидеть, если импульс имеет то, что вам нужно.

Избегайте «char * name» для хранения строк, используйте std :: string.

Avoid using namespace foo, use using foo::bar.

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

+2

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

+1

На самом деле я использую простые указатели для всего, и я искренне не помню последнюю ошибку, с которой я был связан даже с ними. В большинстве случаев это связано с существующим кодом, но я бы тоже писал с ними новые классы. Конечно, члены указателя являются частными, вы их инициализируете, у вас есть дизайн по контракту, вы не играете с владением и т. Д. –

+1

Извините, Дэниэл, я просто хотел правильно указать. В вопросе указателя есть законные причины их использования, и их можно безопасно использовать (после того, как C делает именно это). Совет «избегать», а не «никогда не использовать». – tpdi

1

использовать новый стиль бросает

static_cast, const_cast, reinterpret_cast, dynamic_cast,

вместо типа C не отбрасывает, которые больше не считаются полностью безопасными

предпочитают использовать STL контейнеры более динамично изменение размеров массивов во время выполнения

Смежные вопросы