Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4698
Рейтинг: 426
#31: 2014-12-08 18:20:47 ЛС | профиль | цитата
CriDos писал(а):
Тут у нас может быть SIGSEGV

Каким это образом? Си-Строка обязана кончаться нулевым символом, если его нет - значит это не Си-строка. А функция работает корректно только с Си-строками.
------------ Дoбавленo в 18.20:
CriDos писал(а):
Вообще, указатели штука опасная, и применять их нужно крайне редко.

Когда речь идет о быстродействии - использование сырых указателей намного эффективнее контейнеров типа unique_ptr и подобных XXX_ptr. Бояться указателей не нужно, нужно уметь ими пользоваться
карма: 10
0
Гость
Ответов: 17029
Рейтинг: 0
#32: 2014-12-08 19:26:47 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-09 04:59:29
карма: 0

0
Ответов: 1841
Рейтинг: 369
#33: 2014-12-08 21:47:24 ЛС | профиль | цитата
Assasin писал(а):
Когда речь идет о быстродействии - использование сырых указателей намного эффективнее контейнеров типа unique_ptr и подобных XXX_ptr. Бояться указателей не нужно, нужно уметь ими пользоваться

Конечно эффективней (в некоторых случаях), а ещё делает код менее читаемым и допускается намного больше ошибок, приводящих общие усилия к нулю, а то и в минус реализации

Относительно безопасности кода.
В данном конкретном случае, твой код конечно не имеет SIGSEGV, но, в случае применения такой реализации на стороннем проекте, в котором более одного человека, могли возникнуть проблемы:

#cpp
int main(int argc, char **argv)
{
//Я Вася Пупкин, и я забыл выделить память под массив и скопировать в него нужные данные
char *input;

//тут у нас много кода

//Воспользуюсь ка я этой штукой и заменю чего нибудь:)
replace(input);
printf("%s
", input);
return 0;
}

Не стоит оно того в данном случае.
Мой и твой вариант, выдают совершенно одинаковый результат, даже с отключенной оптимизацией и многократным увеличением массива данных.

unique_ptr - вот тут не понял, при чём тут умные указатели?
У меня они не используются, только ссылки, которые равны сырому указателю, но, безопасней
И кстати, это очень крутая и нужная штука (умные указатели), и оверхед там небольшой, зато освобождает человека от рутинной работы с памятью и спасает проекты от утечек
карма: 1
0
Разработчик
Ответов: 4698
Рейтинг: 426
#34: 2014-12-08 23:30:46 ЛС | профиль | цитата
CriDos писал(а):
У меня они не используются, только ссылки, которые равны указателю, но, безопасней

Откуда ты знаешь? Ты наизусть знаешь реализацию QString и всех тех класссов, что он использует?
(Я тоже, конечно, не знаю, но наверняка там используется какая нибудь хитрость).
А Вася Пупкин сам виноват, что забыл, тут функция уже не при чем, иначе туеву хучу функций из стандартной библиотеки можно обвинить в том же самом
карма: 10
0
Ответов: 1841
Рейтинг: 369
#35: 2014-12-09 01:57:12 ЛС | профиль | цитата
Assasin, ненене, я думал ты имеешь ввиду реализацию с QByteArray (std::vector<unsigned char>)
QString будет медленней конечно.
------------ Дoбавленo в 00.11:
Assasin писал(а):
А Вася Пупкин сам виноват, что забыл, тут функция уже не при чем, иначе туеву хучу функций из стандартной библиотеки можно обвинить в том же самом

Именно для этого и добавили всякие векторы, умные указатели и подобные упрощения, т.к. слишком много ошибок.
Да, человеческий фактор, но, его можно технически преодолеть с помощью таких вот техник
------------ Дoбавленo в 01.57:
[offtop]Assasin, кстати, очень рекомендую ознакомиться с одним известным проектом в котором любят злоупотреблять указателями
http://habrahabr.ru/company/pvs-studio/blog/244097/
Эпичности там хватает с головой [/offtop]
карма: 1
0
35
Сообщение
...
Прикрепленные файлы
(файлы не залиты)