一、代码1(全局类变量)
#include <iostream>
using namespace std;
class A{
public:
A();
~A();
};
A::A(){
std::cout<<"A construct"<<std::endl;
}
A::~A(){
std::cout<<"A destruct"<<std::endl;
}
A a;
int main(){
int b = 100000;
std::cout<<"main start"<<std::endl;
while(b--){
}
std::cout<<"main end"<<std::endl;
return 0;
}
运行结果如下:
A construct
main start
main end
A destruct
结论:全局类变量的构造在main之前,析构在main返回之前
二、代码2(局部类变量)
#include <iostream>
using namespace std;
class A{
public:
A();
~A();
};
A::A(){
std::cout<<"A construct"<<std::endl;
}
A::~A(){
std::cout<<"A destruct"<<std::endl;
}
int main(){
int b = 100000;
std::cout<<"main start"<<std::endl;
A a;
while(b--){
}
std::cout<<"main end"<<std::endl;
return 0;
}
运行结果如下:
main start
A construct
main end
A destruct
结论:局部类变量同普通变量一样在定义处构造,在函数返回后析构
三、代码3(局部类指针变量)
#include <iostream>
using namespace std;
class A{
public:
A();
~A();
};
A::A(){
std::cout<<"A construct"<<std::endl;
}
A::~A(){
std::cout<<"A destruct"<<std::endl;
}
int main(){
int b = 100000;
std::cout<<"main start"<<std::endl;
A *a = new A();
while(b--){
}
delete a;
std::cout<<"main end"<<std::endl;
return 0;
}
运行结果:
main start
A construct
A destruct
main end
结论:类在new处构造,在delete处析构
四、代码4(类作为其他类的成员变量)--实例方式
#include <iostream>
using namespace std;
class B{
public:
B();
~B();
};
B::B(){
std::cout<<"B construct"<<std::endl;
}
B::~B(){
std::cout<<"B destruct"<<std::endl;
}
class A{
public:
A();
~A();
public:
B b;
};
A::A(){
std::cout<<"A construct"<<std::endl;
}
A::~A(){
std::cout<<"A destruct"<<std::endl;
}
int main(){
int b = 100000;
std::cout<<"main start"<<std::endl;
A *a = new A();
while(b--){
}
delete a;
std::cout<<"main end"<<std::endl;
return 0;
}
运行结果如下:
main start
B construct
A construct
A destruct
B destruct
main end
结论:以实例作为其他类的成员,比拥有它的类先调用构造函数,且比拥有它的类后调用析构函数
五、代码5(类作为其他类的成员变量)--指针方式
#include <iostream>
using namespace std;
class B{
public:
B();
~B();
};
B::B(){
std::cout<<"B construct"<<std::endl;
}
B::~B(){
std::cout<<"B destruct"<<std::endl;
}
class A{
public:
A();
~A();
public:
B *b;
};
A::A(){
b = new B();
std::cout<<"A construct"<<std::endl;
}
A::~A(){
delete b;
std::cout<<"A destruct"<<std::endl;
}
int main(){
int b = 100000;
std::cout<<"main start"<<std::endl;
A *a = new A();
while(b--){
}
delete a;
std::cout<<"main end"<<std::endl;
return 0;
}
运行结果如下:
main start
B construct
A construct
B destruct
A destruct
main end
结论:可以通过指针的方式控制类成员的生存期