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

lig*_*ter 6 c++ attributes g++

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

#define WARN_UNUSED     __attribute__((warn_unused_result))

class Trans {

    Vector GetTranslation() const WARN_UNUSED {
        return t;
    }

};
Run Code Online (Sandbox Code Playgroud)

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

Gt.GetTranslation();
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

eng*_*010 2

该属性的目的是(但不限于)指向动态分配数据的指针。

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

这是为了防止内存泄漏和/或其他生命周期控制方面。

例如,如果您调用 malloc(...) 而不存储指针,则之后您将无法释放它。(malloc应该有这个属性)

如果您在函数返回对象上使用它,则该机制毫无意义,因为返回的对象存储在临时变量中,并且可以复制到非临时变量(可能被优化)并且将始终被破坏(因为它将要。

顺便说一句,它对于返回的引用并不是特别有用(除非您的代码意识到它并且需要某种释放机制),因为引用的对象在超出范围时不会被破坏。