您的位置:首页 > 编程语言 > C语言/C++

C++构造和析构

2008-09-04 15:15 155 查看
#include <iostream>

using namespace std;

class B

{

public:

B()

{

cout<<"default constructor"<<endl;

}

B( B &b)

{

cout<<"copy constructor"<<endl;

}

~B()

{

cout<<"destructed"<<endl;

}

B(int i):data(i)

{

cout<<"constructed by parameter " << data <<endl;

}

B& operator=(B& b)

{

cout<<"======== "<<endl;

return *this;

}

private:

int data;

};

B Play(B b)

{

return b;

}

int main()

{

B(5);

// 无名对象,先通过B(int)构造,再析构

B t1=Play(B(4));

// 载入Play(5)的时候调用B的构造函数B(int),根据参数5构造一个B的实例b

// 在return b返回的时候调用B的拷贝构造函数构造一个新的临时对象返回

// return语句离开b的作用域,此时调用b的析构函数

B t2=Play(t1);

// 载入Play(t1)时调用调用B的拷贝构造函数,构造对象b

// return b时先调用B的拷贝构造函数构造一个新的临时对象返回

// 然后调用b的析构函数

t2=t1;

// 局部对象 t1,t2 离开作用域,调用其析构函数

return 0;

}

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

同一进程中的多个线程共享代码段(代码和常量)、数据段(静态和全局变量)和扩展段(堆存储),但是每个线程有自己的栈段。栈段又叫运行时栈,用来存放所有局部变量和临时变量(参数、返回值、临时构造的变量等)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: