• Где используются умные указатели?

    @Griglapidus
    C++/Qt
    В целом они нужны что бы ненужно было думать об освобождении ресурсов вручную.
    unique_ptr - просто хранит динамический объект, когда будет уничтожен unique_ptr он автоматически освободит память с этим объектом.
    shared_ptr нужен когда есть несколько объектов работающих с одним экземпляром. shared_ptr указывающие на один и тот же объект сами считают свое количество и память будет очищена при уничтожении последнего.
    weak_ptr нужен если существует два объекта хранящих умные указатели друг на друга. Если их обоих сделать shared_ptr то программа не очистит память при попытке удалить один из них, так как уйдет в бесконечную рекурсию в попытке удалить их. Для решения есть weak_ptr он просто следит за своим объектом и не мешает его удалению, но может принять право владения если не будет других shared_ptr.
    Ответ написан
    1 комментарий
  • Как из хеадера вызывать функции которые объявлены в main.cpp?

    @Griglapidus
    C++/Qt
    Как вариант можно в .h файл внести объявление функции. Например
    int foo(int a);
    Объявление нужно вставить до функции где она будет использована.
    Определение функции можно оставить в main.cpp
    Ответ написан
    Комментировать
  • Как создается нестандартный интерфейс для программ?

    @Griglapidus
    C++/Qt
    В Qt с некоторого времени добавлен язык QML. Он позволяет верстать интерфейс схожим с HTML + CSS образом.
    После веба должно быть легко в освоении.
    Ответ написан
    Комментировать
  • Про рекурсию. Почему исключение?

    @Griglapidus
    C++/Qt
    В твоей реализации функции много лишних элементов которые сильно усложняют код.
    Например FILE* res тебе в ней вообще не нужен.
    От i так же можно отказаться.
    По сути тебе нужен только указатель на первый элемент и количество элементов в массиве.
    int recursion(int* x, int n)
    {
        if(n > 2) {
            return recursion(x, n/2) * recursion(x + n/2, n - n/2);
        } else if(n ==2) {
            return x[0] * x[1];
        } else {
            return x[0];
        }
    }

    Деление массива на части происходит путём передачи 2 половинок предыдущего массива и их размеров.
    На всякий случай обращу внимание. n - n/2 используется потому что происходит целочисленное деление и округление.
    Ответ написан