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