【发布时间】:2017-02-14 01:50:47
【问题描述】:
假设有这样一个函数:
int * func()
{
std::unique_ptr<int> ptr(new int(3));
//Few more lines of code
//then one function added where programmer writes like some thing
SOME_OTHER_FUNC(std::move(ptr));
return ptr.get();
}
void SOME_OTHER_FUNC(std::unique_ptr<int> arg_ptr)
{
}
有没有办法警告程序员避免std::move 出现此类错误?这不仅仅是关于unique_ptr,也适用于其他对象。
当我们不恰当地使用 moved-from 对象时,是否有任何机制生成警告?
【问题讨论】:
-
不确定是否重复但关闭主题明智:stackoverflow.com/questions/39413502/…
-
我希望编译器编写者针对使用已被强制转换为右值的任何内容(例如
std::move)提出警告。如果它对您造成的伤害足够大,请考虑向您的编译器作者提交补丁! -
@TobySpeight 我怀疑会引入这样的警告。类型可以具有移动构造函数/赋值运算符,使原始构造函数处于(部分,甚至全部)指定状态,并且某些(甚至可能全部)操作将具有明确定义的行为。编译器如何知道使用 move from object 是否是无意的?
-
引自 LLVM 周刊:引入了新的
clang-tidy检查,misc-use-after-move。如果对象在移动后被使用,则会发出警告r281453。
标签: c++11 c++14 move-semantics