我有这样的代码......
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
那样,并且这种链转发是一个问题。