Задать вопрос
  • Правильно понимаю из статьи про умные указатели?

    @dan_sw
    Software Engineer
    1. Это ведь вызов функции, а написано частично как определение функции с void и фигурными скобками. Тут ошибка оформления? Или (сильно сомневаюсь) это действительно определение ф-ии и можно написать определение функции с new в списке аргументов?


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

    Полагаю, что автор статьи изначально планировал сделать определение функции как-то так:
    void functiona(std::unique_ptr<A> c1 = std::make_unique<A>(), std::unique_ptr<B> c2 = std::make_unique<B>()) {
    // какой-то код
    }


    Такой код действительно сработает и во время выполнения функции std::make_unique будет происходить также выделение динамической памяти (как при использовании new), однако такой вариант работает без вызова конструктора умных указателей (через оператор присваивания).

    В статье действительно содержится ошибка в программном коде. Оператор new, в данном случае, вызвать не получится, а вот std::make_unique - без проблем (но не рекомендую так делать).
    Ответ написан
    Комментировать