【发布时间】:2014-05-16 19:57:16
【问题描述】:
我有一个 C++ 程序。这个程序做了这样的事情:
struct MyT {void memfunc(std::unique_ptr<MyT> arg);};
std::unique_ptr<MyT> obj = /* some init */;
obj->memfunc(std::move(obj));
这是否保证有效,或者我最终可以在 nullptr 上调用成员函数吗?
适用标准报价。
我知道参数的评估顺序是未排序的,但我不记得排序是什么 w.r.t.被调用的函数对象。
【问题讨论】:
-
我想说这样的代码一旦遇到就应该避免和/或重写。
-
我们可以(hackily)用
MyT *obj2 = obj.get(); obj2->memfunc(std::move(obj));解决这个问题吗?