boost :: shared_ptr和std :: shared_ptr的同居

时间:2012-09-07 09:02:20

标签: c++ boost c++11 shared-ptr

我想在某些时候使用boost::log,但我无法传递std::shared_ptr作为参数,因为编译器(VS2010)无法将其转换为boost::shared_ptr

我真的不喜欢他们是外星人的事实。

是否有一种安全透明的方式将一个转换为另一个,因为它们不会互相绊倒?

我不认为它与this question重复,两者都是相同的。

1 个答案:

答案 0 :(得分:72)

你可以这样做:

template<typename T>
boost::shared_ptr<T> make_shared_ptr(std::shared_ptr<T>& ptr)
{
    return boost::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

template<typename T>
std::shared_ptr<T> make_shared_ptr(boost::shared_ptr<T>& ptr)
{
    return std::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

编辑:请注意,这不适用于对源ptr的弱引用。所以要小心!