Использование / Mixing C в коде C ++? - PullRequest
22 голосов
/ 26 октября 2010

Является ли использование C в C ++ плохим?

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

Я сейчас нафорум, где спор о std::string против char* имеет место.Некоторые люди говорят, что выделение простого блока памяти char* более эффективно, и пока вы его освобождаете, это нормально.С другой стороны, у нас есть люди, которые говорят, что std::string лучше, потому что в нем не задействовано управление памятью, но оно менее эффективно.

Итак, главный вопрос здесь таков:

  • МикшированиеC / C ++ плохо?Стоит ли использовать ТОЛЬКО на С ++ только при написании кода на С ++?

Буду благодарен за любые ответы!

Ответы [ 12 ]

1 голос
/ 26 октября 2010

Ответ прост: профиль ; определите, что лучше всего работает в вашем случае и используйте его с умом!

0 голосов
/ 22 мая 2014

Ну, я в странной ситуации.Я работаю над системой, которая должна быть в C ++ (используется компилятор C ++ и используется термин C ++), но все написано на C. Это очень расстраивает, потому что доходит до того, что я должен «доказать«C ++ лучше использовать, чем C, хотя мы кодируем на C ++.Когда я представил std :: string, все было чертовски ужасно.Я полагаю, что теперь все начинает загромождаться (смешение C и C ++).Есть редкие случаи обработки ошибок.Фактически, я думаю, что могу сосчитать 3 общесистемных оператора try-catch.Код грязный, утечки памяти заметны, и поиск ошибки - это иголка в стоге сена.Существуют сотни строк кода, которые можно заменить функциями C ++.Я бы сказал, что написание кода более эффективно, чище и проще для понимания.

По моему опыту, да, конечно, вы можете смешивать C и C ++.Вы можете делать все, что захотите, но поддержка, отладка и выяснение того, что происходит, становится проблемой.Легко сказать, что вы собираетесь очистить распределение памяти, но, возможно, кто-то другой использует ваш код и не делает этого.Может быть, вы забыли это сделать и потратили часы на поиск глупых ошибок, вместо того, чтобы использовать это время для чего-то продуктивногоЯ даже не думаю, что должен быть аргумент.Когда вы делаете C ++, делайте C ++.Когда вы делаете C, делайте C.

...