鉴于
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
,也同样适用。
答案 0 :(得分:4)
我认为在不改变接口或使用任何模糊宏的情况下,最好能在C ++ 11和C ++ 14中完成
auto & refX = *x;
refX.f(std::move(x));