我正在浏览 flutter Linux 应用程序源代码,在理解这种声明方法以及它是 C 还是 C++ 方面遇到了一些障碍。
// Source code for context
#include "my_application.h"
int main(int argc, char** argv) {
g_autoptr(MyApplication) app = my_application_new();
return g_application_run(G_APPLICATION(app), argc, argv);
}
我熟悉这些声明和赋值方法
structB->hb = 16;
// OR
structB.hb = 18;
// OR
int hb = 10;
// And the other common method of declaration
但是我从来没有见过这种声明方法,我真的不知道它意味着什么
g_autoptr(MyApplication) app = my_application_new();
这里,
g_autoptr
是一个宏,它声明一个指向指定类型的指针,并注册一个函数,当指针超出范围时,该函数将删除对象。
在 GCC 中,
g_autoptr
会产生类似 的内容
__attribute__((cleanup(MyApplication::cleanup_func))) MyApplication *app = my_application_new();
使用此扩展,编译器可以自动检测指针何时不再使用,并调用将释放对象的函数。
请参阅 https://web.archive.org/web/20231123221452/https://blogs.gnome.org/desrt/2015/01/30/g_autoptr/ 了解更多示例。