Задать вопрос
  • Как не вызывать деструктор два раза?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Проблема здесь не в деструкторе, а в конструкторах. Тебе нужно реализовать конструкторы копирования и перемещения, иначе у тебя так и будут постоянно копироваться указатели из инстанса в инстанс, а при уничтожении будут в итоге такие крещи, как ты описал. Сейчас дефолтный конструктор копирования работает при передаче аргументов и при возврате из функции. Локально это можно полечить ссылками, но глобально – только правильные конструкторы.
    Ответ написан
    Комментировать
  • Как решить проблему с открытием текстового файла в C?

    @res2001
    Developer, ex-admin
    Потому что практически все функции могут вернуть ошибку тем или иным образом.
    Когда fopen возвращает NULL, то это сигнал, что произошла ошибка при выполнения функции. Вы должны проанализировать значение errno и вывести осмысленное сообщение для пользователя.
    https://en.cppreference.com/w/c/io/fopen
    Сейчас же у вас на все ошибки выдается единственное сообщение. Вы можете просто вызывать функцию strerror с кодом ошибки errno, чтоб получить нормальное актуальное сообщение об ошибке.
    https://en.cppreference.com/w/c/string/byte/strerror

    Да. Вводите полный путь к файлу, тогда у вас не будет ошибок связанных с отсутствием файла там где программа пытается его найти. Но это не отменяет правильной обработки ошибок в программе.
    Ответ написан
    Комментировать
  • Как объяснить данный фрагмент кода?

    @galaxy
    В num хранится бинарное представление double в формате IEEE 754. Код позволяет забыть, что это int, и эти бинарные данные интерпретировать, как double.
    Ваш вариант приведет просто к переводу беззнакового целого num (13864543383726325760) в double (1.3864543383726326e+19)
    Ответ написан
    Комментировать
  • Хочу изучать c# и хотела приобрести macbook pro m1 стоит ли покупать его?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    У меня MacBook Pro (не M1). Я думаю нет разницы говорим мы про M1 или какой-то другой (обновлено: разница есть). Если будешь использовать специфичные для винды технологии, то придётся поставить винду, что мне и пришлось сделать (UWP). Для себя понял одно, мне MacOS не нужна и неинтересна, если и работаю за ноутом, то только в винде. При этом я не фанат винды, просто она для меня удобнее. Макбук интересен первую неделю, когда наконец-то купил, что так давно хотел, ведь это так необычно, MacOS! А ноут стоит космических денег (мой больше 200 стоит). Купил, открыл, поигрался, всё прикольно, интересно. Работаю на винде. На MacOS можно будет использовать среду разработки Rider. В метро не взять и не открыть, ведь если у тебя макбук, то ты должен ездить на ламборгини, или летать на вертолёте. Будешь постоянно встречать улыбки (смотрите, с макбуком в метро!!!). Ой, меня понесло не туда.
    Ответ написан
    8 комментариев
  • Как создать exe файл?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    WinRAR использует шаблон ехе. Один и тот же исполнительный файл. Добавляет к нему ресурсы и информацию, которую вы заполнили в "Мастере".

    Для решения вашей "задачи", достаточно одной программы, которая принимает аргументы запуска. Из аргументов берётся название кнопки. Готово. Так что, либо описывайте задачу подробнее, либо изучайте сами. Вопрос звучит достаточно глупо в контексте программирования.
    Ответ написан
    Комментировать
  • Как понять микросервисы?

    @deliro
    Как понять микросервисы?

    Прочитать соответствующую книгу (а лучше ещё парочку про DDD или хотя бы посмотреть этот доклад)

    Затем ответить на несколько вопросов:
    1. Почему вы решили, что микросервисы что-то вам дадут?
    2. Есть ли у вас настоящие причины для микросервисной архитектуры? (А именно: зоопарк технологий с невозможностью написать 99% на одном языке; более тысячи разработчиков; сложность выкатки монолита в виде часов прогонов CI/CD — тестов, билда, деплоя, стопоров выкатки в виде кучи проблем из-за разработчиков; вы такие же большие как гугл, убер, амазон и т.п.). Или вам просто нравится модное слово "микросервисы"?

    Не получится создать хорошую микросервисную архитектуру без умения создать хороший модульный монолит. В этом случае вы получите не только все проблемы плохого монолита: высокая связанность, каскадные падения, долгий CI/CD; но и все проблемы микросервисов: их надо оркестрировать (у вас же есть команда, которая будет поддерживать инфраструктуру?); каждому микросервису нужно своё CI/CD (и хорошее); сеть может (и будет) лагать и обрываться; длительность запросов увеличится на порядок(ки) (особенно если выбрать какой-нибудь JSON-RPC over HTTP); нужно предусмотреть failover strategy (например, идемпотентные ретраи. Вы же уже знаете про correlation id, саги и что делать, если прилетел network error на запрос в другой сервис "списать 10 баксов"?) и circuit breakers; трейсы и логи, которые не пришлось бы искать по сотням .log файлов от каждого сервиса; бизнес-логика расползётся по разным микросервисам и нарушит SRP (пофиг, что нарушит, важнее то, что это починить будет сильно сложнее). Список можно продолжать долго.
    Ответ написан
    11 комментариев
  • Возможно ли изменить исполняемый файл в процессе выполнения*?

    Adamos
    @Adamos
    Unix-way: в исполняемом файле - только исполняемый код, он при запуске читается в память, после этого файл свободен и с ним можно делать все, что позволяет твой доступ.
    Windows-way: в исполняемом файле может быть навалено три короба ресурсов, вплоть до вырожденных случаев вроде самораспаковывающегося архива, когда код - это просто небольшая вставка в гигантский исполняемый файлище. Так что в память читается только код, но при этом предполагается, что он может подтягивать из файла ресурсы, когда они понадобятся. Поэтому файл блокируется на запись до тех пор, пока этот код не закончит выполнение.
    Ответ написан
    9 комментариев
  • ALTLINUX. Почему не пускает в систему?

    BorLaze
    @BorLaze
    Java developer
    После ввода пароля, выводит окно с неполной фразой, что мешает зайти в систему?

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

    Вбей localhost или 127.0.0.1
    Ответ написан
    Комментировать
  • Что делает эта команда: gcc -I my_dts -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o system.dts system-top.dts?

    @res2001
    Developer, ex-admin
    my_dts - подкаталог в текущем каталоге, там gcc будет искать дополнительные файлы, которые используются в директиве #include, компилируемого файла, т.к. my_dts это параметр ключа -I. Если такого каталога нет - gcc никак об этом не сообщит, но возможно будут какие-то ошибки при сборке.
    Опция -E заставляет прервать компиляцию после обработки препроцессором.
    Т.е. в данном случае просто используют препроцессор Си для файлов dts. DTS - device treee source. В DTS файлах описывают железо на котором загружается ОС. Они используются, например, в u-boot, в ядре линукс и т.п.
    Выходной файл задается опцией -o.
    Ответ написан
    Комментировать
  • Хочу стать C++ разработчиком но поможет ли Unity?

    @res2001
    Developer, ex-admin
    На реальной работе вам придется изучать и использовать много разных сторонних библиотек. Практически нигде не используется "голый" ЯП. Так что начните это делать прямо сейчас. Это будет хорошей практикой для вас.
    Ответ написан
    3 комментария
  • Как создать формулу курса собственной вымышленной валюты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Самое простое - это просто позволить игрокам покупать и продавать валюту X по любой цене за валюту Y.
    Это и будет регулирование спросом и предложением.

    Если же нужно всё же фиксировать курс по игровым правилам, то ты можешь посчитать сумму валюты всех игроков. И просто соотнести их.

    Так если валюты X - 1000 единиц в игровом мире, а валюты Y - 2000 единиц,
    то курс будет: 1 ед. X = 2 ед. Y.

    То есть получается, что валюта X - более редкая, поэтому более дорогая. А дальше курс определяется соотношением. Вот и формула.

    Можно добавить всякие хитрости. Например, если ты вливаешь в игру 100000 X, то курс меняется не резко, а плавно, и не обязательно линейно.

    Также курс может быть подвержен мелким скачкам от каких-то игровых событий, объявлений.

    Конечно, польза самой валюты (что на неё можно купить) определяется субъективно игроками. Так что если какая-то валюта будет условно бесполезной, то курс по идее должен быть иным. Ну а что ты хотел при регулировании игровыми правилами? Если хочешь полностью рыночные отношения, то решение в первом абзаце - дать игрокам полную свободу самим выбирать курс.
    Ответ написан
    Комментировать
  • Как отправлять письма по email через c++?

    @rPman
    google: c++ lib email
    откроет мир готовых библиотек по работе с почтой, выбирай на любой вкус и твою среду и компилятор.

    c++ такой язык что программы на нем достаточно многословные получаются

    p.s. первый же результат из гугла https://github.com/karastojko/mailio

    message msg;
    msg.from(mail_address("mailio library", "mailio@gmail.com"));
    msg.add_recipient(mail_address("mailio library", "mailio@gmail.com"));
    msg.subject("smtps simple message");
    msg.content("Hello, World!");
    
    smtps conn("smtp.gmail.com", 587);
    conn.authenticate("mailio@gmail.com", "mailiopass", smtps::auth_method_t::START_TLS);
    conn.submit(msg);
    это многословно?
    Ответ написан
    Комментировать
  • Реализация memcmp без библиотек?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Берете исходник из libc, тащите себе в проект.
    Ответ написан
    Комментировать
  • Как правильно работать с интерфейсами?

    Adamos
    @Adamos
    У вас какая-то беда с пониманием указателей.
    В функцию нужно передавать указатель на IShape, если вы хотите работать с цепочкой наследования.
    А вот конструкции типа
    Simplex simplex = *(new Simplex());

    - просто лютая дичь.
    Ответ написан
    6 комментариев
  • Можно ли использовать SFML в проекте QT?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Я просто не особо понимаю, что в этом файле за язык вообще, сам я точно не разберусь.

    Заплатите тому, кто разберется.
    Ответ написан
    1 комментарий
  • Почему не запускается Ubuntu на VirtualBox?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Для решения проблемы стоит начать с самого начала.

    1. Для корректной работы виртуализации через hyper-v нужно что бы была Os Win10 Pro. На версии Home данная функция не доступна.

    2. Нужно проверить включена ли виртуализация. Для этого достаточно открыть диспетчер задач и посмотреть в разделе ЦП.
    60dd428be5630963504187.png

    2.1. Если виртуализация отключена. Стоит зайти в BIOS вашего компьютера\ноутбука как рекомендовал SagePtr и включить ее.
    Обычно это раздел Secure Virtual Machine Mode но на каждой материнской плате и процессоре может быть по разному.

    3. Далее мы идем включать виртуализацию в самой OS Windows: Для этого нужно зайти Компоненты Windows для этого идем Панель управления -> Удаление программы(Программы и компоненты) -> Включиние и отключение компонентов Windows.
    60dd4403bc13e419089658.png

    Здесь нас интересует пункт Песочница Windows и Hyper-V (Мне было достаточно Hyper-V)
    60dd44618eae1740968337.png

    4. Следом идет рестарт машины.

    Если Вы собираетесь в дальнейшем использовать Docker из под OS Windows или ставите Ubunty через Docker ( да так можно о ждет меньше памяти, при условии если Вам нужна только консоль) то нужно включить разделы Платформы виртуальных машин и Подсистема Windows для Linux

    P.S: Есть ссылка на статью где разобрано включении чуть подробней по каждой ситуации под железо.
    comp-profi.com/kak-vkljuchit-virtualizaciju-v-bios...

    Надеюсь помог.
    Ответ написан
    3 комментария
  • Что означают просто { тут блок кода } в с++?

    @tugo
    Пользуются свойствами блока кода:
    1. создается новая область видимости
    2. объект, созданный внутри блока кода, удалится по завершению (т.е вызовется деструктор). В сочетании с RAII иногда удобно.

    // Когда не хочется придумывать новое имя другой переменной, которая точно такая же по смыслу.
    // И хочется дать ей константность - ее менять я не собираюсь, в смысле изменчивости переменной.
    const bool ok = foo1();
    if (!ok)
        return;
    {
        const bool ok = foo2();
        if (!ok)
            return;
    }


    // Когда надо защитить мьютексом изменение переменной, на как можно более короткое время.
    ...  некий код
    {
        const std::lock_guard<std::mutex> lock(_mutex);
        ++i;
        // _mutex is automatically released when lock goes out of scope
    }
    ... продолжаем код


    Или замерить время выполнения части кода. Создаем объект, в конструкторе которого захватываем текущее время, в деструкторе выводим затраченное время в лог.
    Ответ написан
    Комментировать
  • Что в коде нужно исправить что бы мне выводился на экран ip адрес?

    @none7
    #pragma comment (lib,"Ws2_32.lib")
    #include <winsock2.h>
    #include <WS2tcpip.h>
    #include <Windows.h>
    #include <iostream>
    #include <string>
    
    int main() {
        WSADATA wsa;
        std::string domain;
        int status;
        struct addrinfo hints = { 0 }, * res, * p;
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
    
        // ошибки выводятся в ANSI кодировке, а консоль по умолчанию в OEM
        SetConsoleCP(GetACP());
        SetConsoleOutputCP(GetACP());
    
        // На Windows необходима инициализация сетевой библиотеки
        if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
            std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
            // принято возвращать причину ошибки, а не только сам факт
            return status;
        }
        std::cout << ("Enter domain: ");
        // даже доменные имена могут иметь длину 256 символов
        // пользователь же может вообще ввести сколько ему угодно
        std::getline(std::cin, domain);
    
        if (status = getaddrinfo(domain.c_str(), "80", &hints, &res) != 0) {
            std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
            return status;
        };
    
        char ipstr[INET6_ADDRSTRLEN];
    
        for (p = res; p != NULL; p = p->ai_next) {
            /*const char* ipver;*/
            void* addr;
            if (p->ai_family == AF_INET) {
                struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
                addr = &(ipv4->sin_addr);
                /*ipver = "IPv4:";*/
            }
            else {
                struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
                addr = &(ipv6->sin6_addr);
                /*ipver = "IPv6:";*/
            }
            inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
            std::cout << "addres: " << ipstr << std::endl;
        };
        freeaddrinfo(res);
        system("pause");
        // деструктор сетевой библиотеки
        WSACleanup();
        return 0;
    }
    Ответ написан
    Комментировать
  • Почему в Python можно не описывать поля классов, а в C# обязательно?

    AVollane
    @AVollane
    Начинающий C# разработчик
    Здравствуйте. Это всё из-за того, что Python является языком с динамической типизацией, а C# - язык со строгой типизацией, что помогает избежать дополнительных расходов на память. За счёт этого Python более простой, но C# безопаснее и быстрее. В общем, в C# всё должно быть определено заранее, без каких-либо сюрпризов.
    Ответ написан
    8 комментариев
  • Как записать в файл строку и добавить к ней переменную типа интеджер?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать