C++中的析构函数(Destructor) 点击打开在线编译器,边学边练 除了上一节讲到的类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作。它就是析构函数。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 static void start(void) __attribute__ ((constructor)); 5 static void stop(void) __attribute__ ((destructor)); 6 7 int 8 main(int argc, char *argv[]) 9 { 10 printf("start == %p\n", start); 11 printf("stop == %p\n",...
#include <stdio.h>voidbegin (void) __attribute__((constructor));voidend (void) __attribute__((destructor));intmain (v...
static void stop(void) __attribute__ ((destructor)); 二、带有"构造函数"属性的函数将在main()函数之前被执行,而声明为"析构函数"属性的函数则将在main()退出时执行。 三、C语言测试代码。 代码语言:javascript 复制 #include<stdio.h>__attribute__((constructor))voidload_file(){printf("Constructor is...
大致意思就是,可以给一个函数赋予constructor或destructor,其中constructor在main开始运行之前被调用,destructor在main函数结束后被调用。如果有多个constructor或destructor,可以给每个constructor或destructor赋予优先级,对于constructor,优先级数值越小,运行越早。destructor则相反。
destructor:指定函数为析构函数,在程序结束时自动执行 __attribute__常用属性的语法使用 aligned __ attribute__((aligned (n))): n最大取16, 让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。
void __attribute__((destructor)) __exit() { printf("this is exit\n"); } void __attribute__((constructor)) init() { printf("this is init\n"); } int main() { printf("this is main\n"); return 0; } 上面程序的输出结果如下: ...
// Close the snapshot rsCustSet.Close(); // Destructor is called when the function exits CRecordset::CRecordset建構CRecordset 物件。C++ 複製 CRecordset(CDatabase* pDatabase = NULL); 參數pDatabase 包含物件的指標 CDatabase 或值NULL。 如果不是 NULL, CDatabase 而且尚未呼叫對象的 Open 成...
#include<stdio.h>void__attribute__((destructor)) __exit() {printf("this is exit\n");}void__attribute__((constructor)) init() {printf("this is init\n");}intmain(){printf("this is main\n");return0;} 上面程序的输出结果如下: ...
第一个参数为指向一个键值的指针,第二个参数指明了一个destructor函数,如果这个参数不为空,那么当每个线程结束时,系统将调用这个函数来释放绑定在这个键上的内存块。这个函数常和函数pthread_once ((pthread_once_t*once_control, void (*initroutine) (void)))一起使用,为了让这个键只被创建一次。函数pthread_on...