默认构造函数

来源:8-16 深拷贝浅拷贝及move语义的优化

wxz123

2020-07-28

老师,定义

String s3;                                        // 无参构造函数

时,不应该调用系统自定义的构造函数吗,为啥进入了下面这个自定义的构造函数中呢,如果不传参数的话,那么是是所有的构造函数的默认的参数类型都是const char *类型的吗

String::String(const char *str)
{
	if (str == NULL)
	{
		m_data = new char[1];
		if (m_data != NULL)
		{
			*m_data = '\0';
		}
		else
		{
			exit(-1);
		}
	}
写回答

1回答

quickzhao

2020-07-28

是这样的。标准中规定一旦你自定义了构造函数,那么将不会替你生成默认无参构造。这里事实上你用String s3这里会有一个类型转换导致调用String::String(const char *str),有点巧合,如果你此时定义一个无参构造,系统反而不知道调用哪个构造函数了,会报错。

0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程