构造函数和析构函数可以在private中吗?

C++类与对象之构造函数和析构函数

引例:

我们都知道,构造函数和析构函数是自动调用的,但是如果我们将构造函数和析构函数放在private中,编译器则无法调用到构造函数和析构函数,程序就可能会报错,所以,构造函数和析构函数一定不能放在private类中吗?

控制变量分析:

我们来看以下两个场景:

class test
{
public:
	void print_a()
	{
		cout << _a << endl;
	}
	void Print_test()
	{
		cout << "Print_test" << endl;
	}
private:
	int _a;

	test(int a = 1)
	{
		cout << "构造已完成" << endl;
		_a = a;
	}

	~test()
	{
		cout << "析构已完成" << endl;
	}
};

int main()
{
	test t;
	t.print_a();
	t.Print_test();
}

我们运行这个程序,程序会发生以下报错:

也就是和我们的想象一样,无法访问到test中的构造函数和析构函数

但是,我们稍微修改一下程序,将t的类型由test变成一个指针test*,我们再来看看运行结果

构造函数和析构函数可以在private中吗?_第1张图片

 此时报错发生了变化,也就是说,当我们定义的类型是test* 时,构造函数和析构函数没有被调用了,此时的问题出现在了类没有被实例化

我们再稍微修改一下程序,让t变成一个空指针,并只运行第二个成员函数

构造函数和析构函数可以在private中吗?_第2张图片 我们此刻发现,程序居然运行成功了

总结:

构造函数和析构函数不是一定不可以放在private中,构造函数和析构函数与普通的成员函数没什么太大的本质差别,只要我们不去调用,就不会发生问题,但是这样做并没有什么实际价值,我们一般还是将构造函数和析构函数放在public中来自动调用。

 

你可能感兴趣的:(C++,c++,开发语言)