拷贝构造简单的概念可以看前文c++ | copy构造 copy赋值 | 值传递_tuuzkiii_Tuu的博客-CSDN博客
正文开始,核心:c++规定,成员变量的初始化在构造函数之前
问题描述
定义一个类:
class Tel {..};class AddressBook {public:// 构造函数AddressBook(const std::string& name, const std::list<Tel>& phone);private:std::string thisname;std::list<Tel> thisphone;int somenum;};
定义构造函数:
AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone) {thisname = name;thisphone = phone;somenum = 1;}
问题出现——这个构造函数里面所做的都是赋值,而不是初始化。整个过程的本质:先通默认构造函数初始化,再用AddressBook构造函数进行赋值,所以第一步是白做的。
解决方法
更好的做法:使用成员初值列(member initialization list),此时构造函数做的是初始化。整个过程的本质:thisname以name为初值进行拷贝构造。
AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone):thisname(name), thisphone(phone), somenum(1) {}
也可以这样:就是指定nothing作为初始化参数,但要注意,内置类型必须给定初值(somenum)
AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone):thisname(), thisphone(), somenum(1) {}
如果觉得《c++ | 初始化1 | 「构造函数用成员初值列」》对你有帮助,请点赞、收藏,并留下你的观点哦!