将shared_ptr移动到shared_ptr指向的对象上调用的方法

时间:2017-02-09 10:24:49

标签: c++ c++11 c++14 shared-ptr c++17

鉴于

struct X {
    void f(std::shared_ptr<X>);
};
auto x(std::make_shared<X>());

我可以安全地做到

x->f(std::move(x));

在C ++ 17中,因为x->f在构造X::f的参数之前进行了评估,对吧?据我所知,在早期版本的C ++中没有这样的保证。如何在C ++ 11和C ++ 14中实现类似的东西?

PS:请注意,即使使用std::unique_ptr代替std::shared_ptr,也同样适用。

1 个答案:

答案 0 :(得分:4)

我认为在不改变接口或使用任何模糊宏的情况下,最好能在C ++ 11和C ++ 14中完成

auto & refX = *x;
refX.f(std::move(x));