【发布时间】:2017-11-19 08:06:14
【问题描述】:
例如,如果你有一个声明std::unique_ptr<A> a;,那么下面会导致问题吗?
a->foo(std::move(a));
在我的例子中,foo 是一个虚函数,所以我不能将它移出类。如果上面的代码结果导致问题,那么有什么替代方法可以产生相同的效果?
【问题讨论】:
-
函数是否应该在调用期间拥有被指向的对象?这确实是最重要的问题。
-
好问题,但不确定您到底在问什么。在我的案例中使用的真正方法是 virtual std::unique_ptr
Expression::imbue( std::unique_ptr a, Operator o, size_t priority, std::unique_ptr b);它被称为:a = a->imbue(std::move(a), op, std::move(b)); -
您确定要在一个类上调用
std::move将调用哪个方法?在imbue将被调用时,您的a将被销毁,因此该方法很可能具有无效的上下文。 -
@user3707125 - “在 imbue 将被调用时,你的 a 将被销毁”不,不会。该对象是活动的,并且在调用期间由唯一指针拥有。该对象在退出时立即被销毁,而不是更早。
-
@StoryTeller 我的意思是被
std::move操作破坏,不是内存释放或类似的东西,而是它的数据将不再有效。
标签: c++