我一直在努力寻找这在我的代码中不起作用的原因 - 我认为这应该起作用。以下是头文件的摘录:
#define WARN_UNUSED __attribute__((warn_unused_result))
class Trans {
Vector GetTranslation() const WARN_UNUSED {
return t;
}
};
所以我的问题是:为什么我在编译代码时没有收到警告,例如:
Gt.GetTranslation();
?
感谢您的帮助。
最佳答案
此属性的目的是(但不限于)指向动态分配数据的指针。
它提供了一个编译时保证,即调用代码会将指针存储在一个变量中(也可以作为函数的参数,但我不确定)en 从而委托(delegate)了释放\释放\的责任删除它指向的对象。
这是为了防止内存泄漏和\或其他生命周期控制方面。
例如,如果您在未存储指针的情况下调用 malloc( ...),您之后将无法释放它。 (malloc应该有这个属性)
如果你在函数返回一个对象时使用它,那么这个机制是没有意义的,因为返回的对象存储在一个临时变量中并且可能被复制到一个非临时变量(可能被优化掉)并且总是被破坏(因为它会。
顺便说一句,它对返回的引用不是特别有用(除非你的代码知道它并且需要某种释放机制),因为引用的对象在超出范围时不会被破坏.
关于c++ - 是否存在使用 "__attribute__((warn_unused_result))"不起作用的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933984/