c++ - 是否存在使用 "__attribute__((warn_unused_result))"不起作用的条件?

标签 c++ attributes g++

我一直在努力寻找这在我的代码中不起作用的原因 - 我认为这应该起作用。以下是头文件的摘录:

#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/

相关文章:

c++ - 指针地址的区别

c++ - 调用 join() 后如何恢复线程?

java - 如何在JSP中out.print() HTML属性?

opencv - 无法编译opencv

c++ - Gtkmm 构建错误

c++ - Vscode/C++ - cout 无法输出完整句子且无法与整数连接

jquery - 如何在jquery插件中正确实现option/update方法?

python - NetworkX:从节点属性向图中添加边

c++ - g++ 链接目标文件无法链接

c++ - 不完整类型、引用与指针的无效使用