0

我有这样的代码......

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,并且这种链转发是一个问题。

4

0 回答 0