Информация об изменениях

Сообщение Re[2]: Практика использования std::unique_ptr std::call_once от 23.11.2015 12:14

Изменено 23.11.2015 12:14 xobotik

Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, xobotik, Вы писали:


X>>Подскажите пожалуйста, плохо ли использовать (и почему плохо) std::unique_ptr , std::call_once и std::once_flag в следующем контексте:

U>не плохо

X>>P.S. Если код не очень, скажите пожалуйста, где косяки =)

U>

    U>
  1. _loger — опечатка в имени переменной
    U>
  2. почему эта переменная в анонимном неймспейсе? вы хотите на каждую TU по своему логгеру? если же логгер один, то нужно иметь в виду порядок инициализации глобальных переменных, кто-то в другом классе может захотеть в конструкторе пологировать, а логгер еще не создан

    Что такое TU (включение заголовка)? Логгер один. Как тогда вы считаете нужно реализовать?

    U>
  3. пробрасывать аргументы надо так:
    U>
    U>template<typename... Args>
    U>void Init(Args&&... constructorArgs) {
    U> std::call_once(_initFlag, [&]() { _resource.reset(new T(std::forward<Args>(constructorArgs)...)); });
    U>}
    U>

    U>

Ок, спасибо =)
Re[2]: Практика использования std::unique_ptr std::call_once
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, xobotik, Вы писали:


X>>Подскажите пожалуйста, плохо ли использовать (и почему плохо) std::unique_ptr , std::call_once и std::once_flag в следующем контексте:

U>не плохо

X>>P.S. Если код не очень, скажите пожалуйста, где косяки =)

U>

    U>
  1. _loger — опечатка в имени переменной
    U>
  2. почему эта переменная в анонимном неймспейсе? вы хотите на каждую TU по своему логгеру? если же логгер один, то нужно иметь в виду порядок инициализации глобальных переменных, кто-то в другом классе может захотеть в конструкторе пологировать, а логгер еще не создан
    U>
  3. пробрасывать аргументы надо так:
    U>
    U>template<typename... Args>
    U>void Init(Args&&... constructorArgs) {
    U> std::call_once(_initFlag, [&]() { _resource.reset(new T(std::forward<Args>(constructorArgs)...)); });
    U>}
    U>

    U>

Что такое TU (включение заголовка)? Логгер один. Как тогда вы считаете нужно реализовать?

Ок, спасибо =)