C++技巧之栈变量的析构应用 - 蘭陵N散記
栈变量有一个好处,就是它退栈时会自动析构,并且在栈上对象生成比在堆上分配效率高很多。但每个线程的栈空间是有限的(创建线程时可以设置),所以一般的临时小对象都会在栈上分配。
struct Test {};void test(){Test stack_var; // a stack var;Test stack_var2; //a stack var;int *heap_var = new int; // a heap var}上述的例子,stack_var与stack_var2都是一个栈变量,当然stack_var与stack_var2谁先从栈中分配,不的操作系统,内存管理方式也略有区别。更深一点讲,heap_var这个指针值也是一个栈变量承载,但heap_var所指的地址内容才是从堆上分配的内存空间。当退出test这个函数时,stack_var与stack_var2都会先调用Test的析构,再把其所在的内存空间回收到线程栈中。
在一些场景下,我们可以利用栈变量当退栈时会自动析构这特性,下面我将举两个应用例子。
析构方法释放内存从堆上面new出来的对象,在一个方法条件分支比较多的情...阅读全文
struct Test {};void test(){Test stack_var; // a stack var;Test stack_var2; //a stack var;int *heap_var = new int; // a heap var}上述的例子,stack_var与stack_var2都是一个栈变量,当然stack_var与stack_var2谁先从栈中分配,不的操作系统,内存管理方式也略有区别。更深一点讲,heap_var这个指针值也是一个栈变量承载,但heap_var所指的地址内容才是从堆上分配的内存空间。当退出test这个函数时,stack_var与stack_var2都会先调用Test的析构,再把其所在的内存空间回收到线程栈中。
在一些场景下,我们可以利用栈变量当退栈时会自动析构这特性,下面我将举两个应用例子。
析构方法释放内存从堆上面new出来的对象,在一个方法条件分支比较多的情...阅读全文