cpp拾遗——构造
作者:互联网
1. 构造
构造函数的调用
T t(1,2); // 调用 T(int ,int)
T t2 = (1,2); // 调用 T(int)
T t3 = 1; // 调用 T(int)
T t3 = T(1); // 调用 T(int) 构造匿名对象,并将 匿名对象 和符号 t3绑定
T t4 = t3; // 调用 T(T&)
T t5(t4); // 调用 T(T&)
void func(T t);
func(t5); // 调用 T(T&) 构造形参t
class T {
public:
T(int a); // 当定义了构造函数,编译器就不提供构造函数
}
T a; // 所以这里错误
1.1 构造函数初始化列表
组合对象,可能需要初始化列表
class A{
public:
A(int a);
}
class B {
public:
B(int a, int b);
A m_a;
}
B(1,2); // 这里会报错,由于构造B 时,会先构造A,但是无法调用A的有参构造。
// 所以必须改成
class B{
public:
B(int a, int b) : m_a2(a), m_a(b) {}
A m_a;
A m_a2;
}
组合对象的构造顺序和定义顺序有关,和初始化列表顺序无关。
析构顺序和构造顺序相反
若类有const属性,则必须用参数化列表进行初始化。
2. 匿名对象
函数返回对象时,会构造一个匿名对象,匿名对象释放被析构,取决于是否又符号去接。
T f() {
T a;
return a; // 调用 T(T&) 构造匿名对象
}
T t1 = f(); // 匿名对象又符号接,所以不会被析构
T t2;
t2 = f(); // 匿名对象没符号接,会被析构
标签:调用,int,构造,拾遗,对象,匿名,cpp,构造函数 来源: https://www.cnblogs.com/yangxinrui/p/16255826.html