Assasin писал(а):
Когда речь идет о быстродействии - использование сырых указателей намного эффективнее контейнеров типа unique_ptr и подобных XXX_ptr. Бояться указателей не нужно, нужно уметь ими пользоватьсяКонечно эффективней (в некоторых случаях), а ещё делает код менее читаемым и допускается намного больше ошибок, приводящих общие усилия к нулю, а то и в минус реализации
Относительно безопасности кода.
В данном конкретном случае, твой код конечно не имеет SIGSEGV, но, в случае применения такой реализации на стороннем проекте, в котором более одного человека, могли возникнуть проблемы:
#cpp
int main(int argc, char **argv)
{
//Я Вася Пупкин, и я забыл выделить память под массив и скопировать в него нужные данные
char *input;
//тут у нас много кода
//Воспользуюсь ка я этой штукой и заменю чего нибудь:)
replace(input);
printf("%s
", input);
return 0;
}
Не стоит оно того в данном случае.
Мой и твой вариант, выдают совершенно одинаковый результат, даже с отключенной оптимизацией и многократным увеличением массива данных.
unique_ptr - вот тут не понял, при чём тут умные указатели?
У меня они не используются, только ссылки, которые равны сырому указателю, но, безопасней
И кстати, это очень крутая и нужная штука (умные указатели), и оверхед там небольшой, зато освобождает человека от рутинной работы с памятью и спасает проекты от утечек