假设有这样的函数:
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
,也适用于其他对象。
当我们不恰当地使用移动的对象时,是否有任何生成警告的机制?
答案 0 :(得分:15)
std::move
警告。如果您的程序员不理解这一点,您必须更好地教育他们。如果函数太长以至于程序员可以合理地忽略移动,那么你需要重构你的函数以缩短它。
答案 1 :(得分:0)
并非所有问题都可以或应该在源代码中解决。
使用unique_ptr
是一个实现细节;封装它。
指定函数的前置和后置条件并使用测试。
答案 2 :(得分:0)
让编译器帮助会很好,不是吗?有充分的理由说它并不像你想象的那么简单:
std::move()
不是魔法,你可以编写自己的类似功能。编译器如何知道您的新函数必须以相同的方式处理?您需要一个标准属性来装饰该函数。如果您针对确切的函数std::move
发出警告,则可以将标准库的知识编码为语言编译器¹。¹反驳论点:当然,在验证std::printf()
和std::scanf()
系列函数的格式字符串时,编译器已经做了类似的事情。