构造函数和析构函数

构造函数 #

我们每次实例化一个对象时都会运行的一个特殊函数

例子 #

#include <iostream>

class Entity
{
public:
	//C++中不处理的话默认不初始化任何成员变量
	float X, Y;

	//默认的构造函数,什么都不做
	//不写任何构造函数是会默认添加这个
	//Entity()
	//{

	//}

	//构造函数
	Entity()
	{
		X = 0.00f;
		Y = 0.00f;
	}

	//带参数的构造函数
	Entity(float x, float y) {
		X = x;
		Y = y;
	}

	void  Print() {
		std::cout << X << "," << Y << std::endl;
	}
};

int main()
{

	//Entity e;
	Entity e(10.0f, 5.0f);//栈上分配
	//Entity* e=new Entity(10.0f, 5.0f);//堆上分配
	std::cout << e.X << std::endl;
	e.Print();

	std::cin.get();
}

不希望其他人使用构造函数 #

class Log
{
private:
	Log()
	{
	}
	//或者
	/*
	Log() = delete;
	*/
public:
	static void Write()
	{
	
	}
}

int main(){
	
	Log l;//这里会报错
}

析构函数 #

  • 当你摧毁一个对象时,会调用析构函数,析构函数主要用来清楚任何不再需要的内存
  • 最典型的例子,如果在构造对象时在堆上分配内存,则必须在析构函数中手动清理它
#include <iostream>

class Entity
{
public:
	//C++中不处理的话默认不初始化任何成员变量
	float X, Y;

	//默认的构造函数,什么都不做
	//不写任何构造函数是会默认添加这个
	//Entity()
	//{

	//}

	//构造函数
	Entity()
	{
		X = 0.00f;
		Y = 0.00f;
		std::cout << "Created Entity!" << std::endl;

	}

	//带参数的构造函数
	Entity(float x, float y) {
		X = x;
		Y = y;
	}


	~Entity()
	{
		std::cout << "Destroyed Entity!" << std::endl;
	}

	void  Print() {
		std::cout << X << "," << Y << std::endl;
	}
};

void Function()
{
	Entity e;//栈上分配
	e.Print();
}

int main()
{
	Function();
   /*
Created Entity!
0,0
Destroyed Entity!

   */

	std::cin.get();
}