`
kofsky
  • 浏览: 201660 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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  

 

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

 

 

分享到:
评论

相关推荐

    C++构造和析构的多态

    ### C++构造和析构中的多态实现 在C++编程语言中,多态是一种重要的特性,它允许程序员编写能够处理不同数据类型的代码。多态的实现通常依赖于虚函数和虚函数表(vtable)。然而,在构造函数和析构函数中调用虚函数...

    包含构造函数和析构函数的C++程序

    ### 构造函数和析构函数在C++中的应用 #### 概述 构造函数与析构函数是C++编程语言中非常重要的概念,它们在类的实例化和销毁过程中扮演着关键角色。通过理解这些函数的工作原理及其作用,我们可以更好地控制对象...

    c++构造函数与析构函数ppt

    c++中关于构造函数与析构函数部分的课件,有助于初学者自学。

    构造析构的顺序

    总结来说,理解C++中构造和析构的顺序对于编写健壮的代码至关重要。正确处理构造和析构的顺序能避免资源泄露、悬挂指针等问题,保证程序的稳定性和可靠性。在实际编程中,我们应该遵循这些规则,合理设计类的结构,...

    c++(7) 构造和析构函数

    ### C++中的构造和析构函数 构造函数与析构函数是C++中非常重要的概念,它们对于确保类实例的正确初始化与清理至关重要。本文将详细介绍构造函数与析构函数的相关知识点。 #### 一、构造函数 构造函数是一种特殊...

    c++构造函数和析构函数,拷贝,重载

    根据给定的文件标题“C++构造函数和析构函数,拷贝,重载”以及描述“一道很好的习题代码,包含构造、析构、拷贝、重载”,我们可以了解到这段代码主要涉及到了C++中类的设计与实现,特别是构造函数、析构函数、拷贝...

    C++构造函数和析构函数的调用顺序1

    程序运行时,你会看到对应的构造和析构函数按照上述规则被调用。 这个例子展示了构造函数和析构函数调用的直观顺序,帮助理解C++对象生命周期管理的基本原理。在实际编程中,理解和掌握这一点对于防止内存泄漏和...

    全局对象构造与析构机制剖析

    而`func_before_main`和`func_after_main`则通过`__attribute__((constructor))`和`__attribute__((destructor))`显式标记为构造和析构函数,分别在`.init`和`.fini`段中被调用。 通过观察运行输出,我们可以看到...

    构造函数和析构函数PPT课件.pptx

    构造函数和析构函数PPT课件.pptx ...构造函数和析构函数是C++编程语言中两个非常重要的概念,它们在对象的创建和销毁过程中扮演着关键的角色。了解构造函数和析构函数的概念和用法是编写高效的C++程序的关键。

    C++中构造函数和析构函数

    该视频更好介绍C++的构造函数和析构函数

    派生类的构造与析构_派生类的构造与析构_

    在分析给定的文件名"派生类的构造与析构.cpp"时,我们可以推测这是一个包含C++源代码的文件,其中可能包含了关于派生类构造和析构的示例代码。通过对这个文件的阅读和学习,开发者可以更直观地理解上述理论知识,并...

    C++构造函数和析构函数顺序

    在C++编程中,构造函数和析构函数是两种特殊的方法,它们在对象生命周期的不同阶段起着关键作用。本文将详细探讨这两种函数的调用顺序及其重要性。 构造函数是用于初始化新创建的对象的成员变量的函数。在C++中,...

    C++构造函数、复制构造函数和析构函数专题(修订版).pdf

    C++构造函数、复制构造函数和析构函数专题(修订版).pdf

    构造与析构顺序

    构造与析构在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 初始化对象的...

    C++构造函数、复制构造函数和析构函数专题(修订版)[汇编].pdf

    C++构造函数、复制构造函数和析构函数专题(修订版)[汇编].pdf

    C++构造函数,复制构造函数和析构函数专题[1].pdf

    在C++编程语言中,构造函数、复制构造函数和析构函数是面向对象特性的重要组成部分,它们在对象的生命周期管理中扮演着至关重要的角色。同时,继承、虚函数和多态性是C++实现面向对象设计的核心概念。下面将详细讨论...

    深入解析C++中的构造函数和析构函数

    调用构造函数和析构函数的顺序:先构造的后析构,后构造的先折构。它相当于一个栈,先进后出。 代码如下:#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;class Student{ public: Student(string,string,...

    C++ 实验四 构造与析构编程

    1.设计一个程序,定义一个矩形类,包括数据成员和函数成员。要求有构造函数、析构函数,完成赋值、显示、计算矩形的面积等接口,并编写main函数进行测试。2.重载构造函数。修改上题,一种构造函数用整型变量记录...

    构造函数和析构函数

    C++学习资料,学习面向对象语言的朋友可以看看,绝对有用,个人很喜欢

Global site tag (gtag.js) - Google Analytics