std::forward и фабрика, которая вызывает std::make_shared

У меня есть такой код...

X* raw = ::new X("abc");
// do something benign to object
std::shared_ptr<X> ptr(raw);

Теперь рассмотрим то же самое, используя объектную фабрику...

template<typename T, typename... A>
std::shared_ptr<T> factory(A&&... args) {
    auto ptr = std::make_shared<T>(std::forward<A>(args)...);
    // do something benign to object
    return ptr;
}

std::shared_ptr<X> ptr = factory<X>("abc");    

Это упрощенный пример, но я вижу необъяснимое падение при использовании фабрики, которое, по-видимому, связано с поврежденным общим указателем.

Я не знаком с внутренностями std::make_shared, но мне интересно, если он, в свою очередь, делает что-то вроде пересылки аргументов для размещения ::newи что эта цепная пересылка является проблемой.

0 ответов

Другие вопросы по тегам