C++创建对象的方式
1. 分配内存
2. 调用构造函数(初始化对象成员)‘
.
程序结束时
- 先调用析构函数
- 在释放对象
构造函数的特点
- 如果类内部提供了构造函数,编译器不在提供默认的构造函数,但是提供默认拷贝构造(逐字节拷贝)
- 如果类内部提供了拷贝构造函数,编译器将不再提供任何的构造函数
初始化列表
问题:
当类的内部包含了类对象成员
对象类内部提供了多个构造函数,我们将如果指定调用那个构造函数?
初始化列表完美的解决了这个问题
注意:初始化列表只能在构造函数中使用
示例
class Student
{
public:
Student()
{
}
Student(string name,int age)
{
}
private:
int mAge;
string mName;
}
class Teacher
{
public:
//初始化列表语法
//Teacher(string name,int age) : mStu(name,age) //给初始化列表传参
Teacher() : mStu("wuyou",10)
{
}
Student mStu;
}
void test()
{
Teacher t("wuyou",10);
}
初始化列表初始化常量
class Demo
{
public:
Demo() :a(10),ref(20)
{
a = 10; //err
}
const int a;
//万能引用
const int &ref;
}
初始化的优先级
初始化列表优先级高于构造函数
当类内部包含对象成员,编译器会调用对称成员的默认构造函数
首先创建对象成员
总结
- 初始化列表解决了不同场景中初始化对象成员的问题
- 解决了const修饰的成员变量不能在构造函数中初始化的问题
- 成员变量中出现引用时,必须使用初始化列
- 多个初始列表使用逗号隔开
- 如果一个构造函数写了初始化列表,所有构造函数都必须写初始化列表