1 #include <iostream>
2
3 using namespace std;
4
5 class A
6 {
7 public:
8 A(int a = 1)
9 {
10 cout<<"constructing:"<<this<<endl;
11 }
12 A(const A &s)//g++规定必须加const,否则编译不通过,加const有益无害,
13 { //即可以接收const变量,又可以接收非const变量
14 cout<<"copy of:"<<&s<<endl;
15 }
16 virtual ~A()
17 {
18 cout<<"deconstructing:"<<this<<endl;
19 }
20 private:
21 int a;
22 };
23
24 A fun()
25 {
26 A ret;
27 return ret;
28 }
29
30 A fun1(A param)
31 {
32 A ret = param;
33 return ret;
34 }
35
36 int main(int argc, char **argv)
37 {
38 fun1(1), cout<<"out"<<endl;
39 return 0;
40}
result:
constructing:0xbfafc858 //将1转换为A(1),调用一次构造函数
copy of:0xbfafc858 //param=A(1),调用一次拷贝构造函数
copy of:0xbfafc860 //ret = param,调用一次拷贝构造函数
copy of:0xbfafc828 //temp = ret,调用一次考贝构造函数 “temp”为函数返回所用的中间变量
deconstructing:0xbfafc828//析造ret对象
out
deconstructing:0xbfafc868//析构temp对象
deconstructing:0xbfafc860//析构param对象
deconstructing:0xbfafc858//析构A(1)对象
从以上结果可以得出结论:构造函数可以转换一个和第一个参数类型相同的变量为对象
函数体中的局部变量,在}处结束,并释放空间,函数的参数和返回值。
‘;’处结束,并释放空间
构造 与析构---栈的关系
c++构造 与析构顺序
最新推荐文章于 2024-05-06 22:54:41 发布