是否存在使用“__attribute __((warn_unused_result))”不起作用的条件?

时间:2011-08-03 22:17:22

标签: c++ attributes g++

我一直试图找到一个原因,为什么这在我的代码中不起作用 - 我认为这应该有效。以下是头文件的摘录:

#define WARN_UNUSED     __attribute__((warn_unused_result))

class Trans {

    Vector GetTranslation() const WARN_UNUSED {
        return t;
    }

};

所以我的问题是:当我用以下代码编译代码时,为什么不收到警告?

Gt.GetTranslation();

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

此属性的目的是(但不是唯一的)指向动态分配数据的指针。

它给出了编译时保证调用代码将指针存储在变量中(也可以作为函数的参数,但我不确定)en因此委托释放\释放\的责任删除它指向的对象。

这是为了防止内存泄漏和/或其他终身控制方面的问题。

例如,如果你在没有存储指针的情况下调用malloc(...),那么之后就无法释放它。 (malloc应具有此属性)

如果在函数上使用它返回一个对象,那么该机制就没有意义了,因为返回的对象存储在临时对象中并且可能被复制到非临时变量(可能被优化掉)并且总是被破坏(因为它会。

BTW,对于返回的引用并不特别有用(除非你的代码知道它并需要某种 release 机制),因为当超出范围时引用的对象不会被破坏