c++编译器构造析构方案 PK 对象显示初始化方案

设计构造函数和析构函数的原因:

       在说这个原因之前,先说一下普通方案的初始化的原理,在普通方案中,先创建一个对象,然后这个对象去调用一个普通函数init()去进行初始化工作。这种普通方案存在两个缺点,第一个是每次创建一个对象,都需要显示的去调用一个函数去进行初始化,麻烦,如果由于失误,而忘记去调用这个初始化的函数,这个时候可能就会出现致命性的错误,因为没有初始化的对象真的很危险。第二,其不能解决所有的问题,比如,Test a[1021]={t1,t2..,,}这么多对象,难道要一个个的依次去显示的调用这个普通init函数么。而如果用构造函数,则完全没有这些问题,把所有的初始化和结束工作分别放在构造函数和析构函数中,就可以解决这些问题。具体的看如下代码:

       

#include <iostream>
using namespace std;

class Test3
{
public:
	void init(int _a, int _b)
	{
		a = _a;
		b = _b;
	}
protected:
private:
	int a;
	int b;
};

void main31()
{
	//类没有提供构造函数,c++编译器会自动给你提供一个默认的构造函数
	//类没有提供构造函数 copy构造构造函数, c++编译器会自动给程序员提供一个 默认的copy构造函数  = 
	Test3 t1; 
	int a = 10; 
	int b = 20;
	t1.init(a, b);

	Test3 tArray[3];
	tArray[0].init(1, 2);
	tArray[1].init(1, 2);
	tArray[2].init(1, 2);

	//
	Test3 t21;  t21.init(1, 2);
	Test3 t22;	t22.init(1, 2);
	Test3 t23;	t23.init(1, 2);

	//在这种场景之下 显示的初始化方案 显得很蹩脚
	Test3 tArray2[3] = {t21, t22, t23};

	//在这种场景之下,满足不了,编程需要
	Test3 tArray3[1999] = {t21, t22, t23};
	
	cout<<"hello..."<<endl;
	system("pause");
	return ;
}

       

          

发布了200 篇原创文章 · 获赞 77 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/tianguiyuyu/article/details/102984765