C++构造和析构

  1. #include <iostream>
  2. using namespace std;
  3. class B 
  4. {  
  5. public
  6.     B() 
  7.     {
  8.         cout<<"default constructor"<<endl; 
  9.     } 
  10.     B( B &b)
  11.     {
  12.         cout<<"copy constructor"<<endl; 
  13.     }
  14.     ~B() 
  15.     {
  16.         cout<<"destructed"<<endl;
  17.     } 
  18.     B(int i):data(i)
  19.     { 
  20.         cout<<"constructed by parameter " << data <<endl; 
  21.     }
  22.     B& operator=(B& b)
  23.     {
  24.         cout<<"======== "<<endl; 
  25.         return *this;
  26.     }
  27. private
  28.     int data; 
  29. };
  30. B Play(B b)
  31. {
  32.     return b;
  33. }
  34. int main()
  35. {
  36.     B(5);
  37.     // 无名对象,先通过B(int)构造,再析构
  38.     
  39.     B t1=Play(B(4));
  40.     // 载入Play(5)的时候调用B的构造函数B(int),根据参数5构造一个B的实例b
  41.     // 在return b返回的时候调用B的拷贝构造函数构造一个新的临时对象返回
  42.     // return语句离开b的作用域,此时调用b的析构函数
  43.     B t2=Play(t1);
  44.     // 载入Play(t1)时调用调用B的拷贝构造函数,构造对象b
  45.     // return b时先调用B的拷贝构造函数构造一个新的临时对象返回
  46.     // 然后调用b的析构函数
  47.     t2=t1;
  48.     // 局部对象 t1,t2 离开作用域,调用其析构函数
  49.     return 0;
  50. }

output:

constructed by parameter 5
destructed
constructed by parameter 4
copy constructor
destructed
copy constructor
copy constructor
destructed
========
destructed
destructed

 

  • 一个命名的自动对象,当程序的执行每次遇到它的申明时建立,每次程序离开它出现的块(作用域)时销毁;
  • 一个自由存储对象,通过new运算符建立,通过一个delete运算符销毁;
  • 一个非静态成员对象,作为另一个类对象的成员,在它作为成员的那个对象建立或销毁时,它也随之被建立或销毁;
  • 一个数组对象,在它作为元素的那个数组被建立或销毁的时候建立或者销毁;
  • 一个局部静态对象,在程序执行中第一次遇到它的申明时建立一次,在程序终止时销毁一次;
  • 一个全局对象,名字空间的对象,类的静态对象,它们只在“程序开始时”建立一次,在程序终止时销毁一次;
  • 一个临时对象,作为表达式求值的一部分被建立,在它所出现的那个完整的表达式的最后被销毁;
  • 一个在分配操作中由所提供的参数控制,在通过用户提供的函数获得的存储里放置的对象;
  • 一个union对象,它不能有构造函数和析构函数。
    (以上片段摘自<C++程序设计语言>,P218)


关于   如何计算sizeof(类)  
  空类:1  
  没有虚函数:sizeof(数据成员)的和  
  有虚函数:    sizeof(数据成员)的和+sizeof(V表指针)=4  

 

同一进程中的多个线程共享代码段(代码和常量)、数据段(静态和全局变量)和扩展段(堆存储),但是每个线程有自己的栈段。栈段又叫运行时栈,用来存放所有局部变量和临时变量(参数、返回值、临时构造的变量等)。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值