• Как проверить существует ли указатель или был удален?

    @Mercury13
    Программист на «си с крестами» и не только
    В Си++11 для этого есть два класса: std::shared_ptr и std::weak_ptr.

    Первый служит для того, чтобы несколько указателей «смотрели» на один объект, и при исчезновении ВСЕХ объект автоматически исчезал.

    Второй «смотрит» на тот же объект, что управляется shared_ptr’ами, но не мешает объекту удаляться. Его можно преобразовать в shared_ptr и тогда уж посмотреть, исчез объект или нет.

    UPD. Вы делаете свой shared_ptr. Тогда, если shared_ptr не NULL — значит, считаем, что объект действительно там есть! А если кто-то удалил своими силами — значит либо shared_ptr глючный, либо кто-то удалил объект в объод семантики умных указателей.

    Кроме того, код по ссылке странный. if (ref_count == 0) — это мы сравниваем указатель с NULL! Написано «переписываем оператор равенства» — по факту переписываем операцию присваивания…
    Ответ написан
    9 комментариев
  • Почему в программировании столько математики?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Копирование файлика на уровне ОС - элементарная математика (байты перенести из одного места в другое), все числа целые, адресация простейшая.

    Программирование контроллера, который будет копировать данные - высшая математика, ибо нужен контроль целостности данных (алгоритмы хеширования или банальных контрольных сумм), алгоритмы коррекции ошибок, шифрование.

    Программирование передачи данных по сети - плюс ко всему прочему шифрование, протоколы передачи данных, асинхронная передача.

    Программирование в 2д или 3д - геометрия разного порядка. Вычисление стандартных вещей - можно ли пройти из точки А в точку Б и можно ли увидеть из точки А точку Б, а также как это отрисовать с минимальными ресурсами - ужас.

    Ну и далее. Простое приложение для какого-нить IOS которое выводит "привет вася" - это одно. А Shazam, который анализирует акустическую запись, разбирает ее на части, выполняет сравнение с учетом искажений - тут вам нужна не только хорошая математика, но и еще неплохо в этих сигналах разбираться, понимать как они хранятся в компе (как преобразуется аналог в цифру, с какими потерями, и что с ними делать) и так далее.

    В общем алгоритмы, алгоритмы, алгоритмы.
    Как говорил Ломоносов, математику следует учить только за то, что она приводит ум в порядок.
    Ответ написан
    2 комментария
  • Насколько сложнее C++ чем Java?

    @MadridianFox
    Web-программист, многостаночник
    Вы не то спрашиваете. Вот зачем вы спрашиваете? Хотите выучить что-то полегче?
    На самом деле вы должны ответить на вопрос - какие программы вы хотите писать.
    С академической точки зрения плюсы сложнее. Да, не в последнюю очередь из-за ручной работы с памятью. Но после нескольких месяцев практики вы привыкните и это не будет сложным.
    Ответ написан
    4 комментария
  • Учить ли c++ в 2018. Для знающего C#?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Если вы считаете, что за месяц, почитав базовую работу с int/string и циклами вы что-то освоили, вы глубоко заблуждаетесь, особенно учитывая ваши другие вопросы.

    Изучите хотя бы один язык, тот же C# до уровня уверенного джуниора, потом уже будете считать себя "знающим C#", потому что сейчас вы его совершенно не знаете.
    Ответ написан
    5 комментариев
  • Какой язык программирования выбрать разработчику мобильных игр?

    coremission
    @coremission
    Профессиональный программист игр.
    Рекомендую именно Unity. Самый популярный движок, много чего вы бесплатно возьмете из Assetstore для своей игры, много советов найдете на форуме, коммьюнити у движка огромное. C# как язык очень крутой, мультипарадигменный. Среды разработки под него очень крутые. Одни плюсы!
    Ответ написан
    Комментировать
  • Что не даёт на C++ писать кроссплатформенные приложения?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Любая программа, написанная под конкретную платформу - работает гарантированно на этой платформе.

    java считается кроссплатформенной, потому что вы пишете не под линукс и не под виндовс и не под андроид, а под java, а уже те, кто писали саму java машину, берут на себя то, что сперва на windows/linux/android будет установлена соответствующей версии java, в которой будет крутиться ваша программа.
    При этом все равно разница существует, поэтому нужно ее учитывать при разработке.

    Для С и С++ основная платформа - ОС, а то и непосредственно процессор, следовательно уровень абстракции от железа и архитектуры в этом языке низкий, и для разработки кроссплатформенного софта, учет всех нюансов различных архитектур и операционок будет на программисте.
    Ответ написан
    Комментировать
  • Что нужно знать С++ разработчику для начала работы на фрилансе?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    PHP, Python, Javascript, Java или C#
    Ответ написан
    Комментировать
  • В чем суть WinApi?

    @Mercury13
    Программист на «си с крестами» и не только
    Windows API — это самый низкоуровневый интерфейс Windows, доступный прикладному программисту — в том плане, что он на долгосрочной поддержке и не изменится с Windows 11.

    Поверх Windows API работают все BOOST и STL.

    Пример: читать файл в 130 мегабайт по одному байту. Добавив асинхронного чтения через OVERLAPPED, я сумел это сделать менее чем за 2 секунды (это был поток общего назначения с виртуальными read(), write() и seek(); специализированный прикладной буфер даст ещё выигрыша, но и это хорошо). То же самое через FILE* — не дождался.

    Пример второй, всё те же файлы. Дело в том, что Excel захватывает свои файлы на всё время, пока он открыт. Закрывать? — плохой выбор. Добавив один флажок в CreateFile, документы всё-таки стало возможным открывать при работающем Excel.
    Ответ написан
    2 комментария
  • Как унаследовать оператор = из переопределенной функции базового класса?

    Унаследовать родительский оператор можно добавив в Test2:
    using Test::operator=;

    Но лучше не наследовать старый оператор, а просто добавить новый в Test2:
    Test2& operator=(const Test1& t);

    Родительский оператор не знает ничего про m_tt и его значение после присвоения останется прежним, что чревато труднообнаружимыми ошибками.
    Ответ написан
    5 комментариев
  • Разработка игр - какой в этом смысл?

    @GreatRash
    Я, как человек, работающий непосредственно в геймдеве, могу ответить так: производить тонны казуалок за донат, к моему величайшему сожалению (как геймера со стажем), в стопицот раз выгодней чем клепать очередную GTA годами, которая ещё неизвестно зайдёт народу или нет.

    Сложно передать словами те чувства, которые испытываешь, когда очередной блоггер поливает известной субстанцией то, над чем ты годами работал... Казуалочку же можно склепать за пол года и спокойно грести бабло. не напрягаясь. Такие дела.
    Ответ написан
    1 комментарий
  • Как передать вектор в функцию?

    @Mercury13
    Программист на «си с крестами» и не только
    Раз мы изменяем наш вектор — то по неконстантной сцылке.

    void add (int n, std::vector<int>& vec){
        vec.push_back(n);
    }
    
    std::vector <int> myVec;
    add(5, myVec);
    Ответ написан
    Комментировать
  • Как передать вектор в функцию?

    @khrisanfov
    Программист
    [] - возвращает ссылку на элемент. ru.cppreference.com/w/cpp/container/vector/operator_at
    TestVec[0].x = 1; 
    TestVec[0].output();
    Ответ написан
    Комментировать
  • Коимпилятор ругается на инициализацю ссылки на функцию как написать что бы не было ошибки?

    Nipheris
    @Nipheris Куратор тега C++
    Вы не сможете сохранить указатель на функцию-член в переменной указателя на обычную функцию. Ваши варианты:
    - сделать dfLineFunc статической/свободной функцией (что было бы логично для функции активации, неужели она у вас от состояния зависит?);
    - сделать dfActive указателем на функцию-член и пользоваться им соответственно.
    Ответ написан
    Комментировать
  • В чём смысл этой конструкции?

    coremission
    @coremission
    Профессиональный программист игр.
    Возможно писали универсальный код, который должен подойти и для std::vector, а не только для массива.

    И не везде можно заменить, ведь в конце где деление sizeof(arr[0]) не то же самое, что sizeof(arr).
    Ответ написан
    3 комментария
  • Как в си найти котангенс?

    @Mercury13
    Программист на «си с крестами» и не только
    Единственно правильный способ — tg(π/2 − x).
    Дело в том, что 1/tg будет глючить в районе 90°.
    Ответ написан
    4 комментария
  • Что делать с кодировкой?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Content-Encoding: gzip

    Распаковать данные забыли
    https://stackoverflow.com/a/24949005
    Ответ написан
    Комментировать
  • В чем мои ошибки в коде?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Не знаю касательно корректности алгоритма, но PVS-Studio обнаруживает 4 ошибки, из-за которых уже и так всё работает не так как надо.
    SetOfNumb(int a[]) {
    size = sizeof(a)-1;
    V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (a)' expression. consoleapplication2017.cpp 37
    Оператор sizeof вычислят здесь размер указателя, а не массива. В результате, переменная size всегда будет равна 3 в 32-битной программе или 7 в 64-битной программе.

    Аналогично здесь:
    size = sizeof(a);
    V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (a)' expression. consoleapplication2017.cpp 46

    И здесь:
    for (int i = 0, j = 0; i < sizeof(temp.arr); i++) {

    V604 It is odd that the number of iterations in the loop equals to the size of the 'temp.arr' pointer. consoleapplication2017.cpp 88

    Ещё происходит ошибка копирования:
    n = z;
    V1002 The 'SetOfNumb' class, containing pointers, constructor and destructor, is copied by the automatically generated operator=. consoleapplication2017.cpp 140
    Класс SetOfNumb сложный, выделяет память. Но при этом отсутствует operator =. В результате просто копируются члены класса, что приведёт к двойному освобождению памяти.
    Ответ написан
    5 комментариев
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Какие форматы моделей подгружает opengl?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    OpenGL вообще не знает про форматы моделей, это низкоуровневый api. Это ваша ответственность скормить ему набор вершин, а из какого файла их читать - по барабану.
    Ответ написан
    1 комментарий
  • С чего нужно начать изучать программирование нейронных сетей?

    AgentProvocateur
    @AgentProvocateur
    методично, всерьёз и надолго погрузиться в тему

    Погружайся)) Методичнее некуда)
    59f726f14da9a668973662.png
    Ответ написан
    12 комментариев