main.cpp
- #include <cstdlib>
- #include <iostream>
- #include "A.h"
- #include "B.h"
- int main(int argc, char *argv[])
- {
-
- A a;
- A *ptr=new A();
- a.f();//栈上面 在作用周期内是 没有办法被释放的 ,它将随着系统上下文的完成被系统自动回收
- ptr->f();//堆上面。可以被调用回收
- delete ptr;
- a.~A();//按照上面的理论这个只是表面被回收了,实际没有被回收
-
- for(int i=0;i<=5;i++)
- A *b=new A(); //在堆上可惜没法使用
-
- for(int i=0;i<=5;i++)
- A c; //在栈上随着生命周期被释放
-
- B b1;
- system("PAUSE");
- return 0;
- }
B.h
- #ifndef B_h
- #define B_h
- class B:A{
- public :
- B();
- ~B();
- void f();
- };
- #endif
B.cpp
- #include "A.h"
- #include "B.h"
- #include <iostream>
- using namespace std;
- B::B(){
- cout<<"类B被创建了"<<endl;
- }
- B::~B(){
- cout<<"B OVER 了"<<endl;
- }
- void B::f(){
- cout<<"this is F"<<endl;
- }
A.h
- #ifndef A_h
- #define A_h
- class A{
- public :
- A();
- ~A();
- void f();
- };
- #endif
A.cpp
- #include "A.h"
- #include <iostream>
- using namespace std;
- A::A(){
- cout<<"类A被创建了"<<endl;
- }
- A::~A(){
- cout<<"A OVER 了"<<endl;
- }
- void A::f(){
- cout<<"this is F"<<endl;
- }
注意堆栈
第一个A a
在栈上面被创建。随着main函数的消失而消失。除此之外没法消失。要是不信可以用WINDOWS下的CMD运行生成后的可执行文件。
在栈上面被创建。随着main函数的消失而消失。除此之外没法消失。要是不信可以用WINDOWS下的CMD运行生成后的可执行文件。
第二个生成的指针指向的在堆上面。
后面两个for生成的都没法用。一个在堆上面。一个随着for作用域的结束而结束。
C语言数据内容大都在内存里面,极少部分在寄存器里面。
内存分为堆,栈,常量和全局区里面
其中在栈上面的不能想结束就结束。这个回答了http://blog.chinaunix.net/space.php?uid=25887681&do=blog&id=369955的部分问题。看来不是system.gc()来释放的。
栈上面有没有用下次看看是咋回事。