`g_autoptr(MyApplication) app = my_application_new();`是什么意思

问题描述 投票:0回答:1

我正在浏览 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();
c++ c flutter
1个回答
4
投票

这里,

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/ 了解更多示例。

© www.soinside.com 2019 - 2024. All rights reserved.