我一直试图找到一个原因,为什么这在我的代码中不起作用 - 我认为这应该有效。以下是头文件的摘录:
#define WARN_UNUSED __attribute__((warn_unused_result))
class Trans {
Vector GetTranslation() const WARN_UNUSED {
return t;
}
};
所以我的问题是:当我用以下代码编译代码时,为什么不收到警告?
Gt.GetTranslation();
感谢您的帮助。
答案 0 :(得分:2)
此属性的目的是(但不是唯一的)指向动态分配数据的指针。
它给出了编译时保证调用代码将指针存储在变量中(也可以作为函数的参数,但我不确定)en因此委托释放\释放\的责任删除它指向的对象。
这是为了防止内存泄漏和/或其他终身控制方面的问题。
例如,如果你在没有存储指针的情况下调用malloc(...),那么之后就无法释放它。 (malloc应具有此属性)如果在函数上使用它返回一个对象,那么该机制就没有意义了,因为返回的对象存储在临时对象中并且可能被复制到非临时变量(可能被优化掉)并且总是被破坏(因为它会。
BTW,对于返回的引用并不特别有用(除非你的代码知道它并需要某种 release 机制),因为当超出范围时引用的对象不会被破坏