C++ 类的高级特性解析
1. 成员逐个初始化
在 C++ 中,当使用一个类对象初始化另一个类对象时,默认情况下会进行成员逐个初始化。例如:
Triangular tri1(8);
Triangular tri2 = tri1;
在这个例子中, tri1
的数据成员 _length
、 _beg_pos
和 _next
会依次复制给 tri2
。这就是默认的成员逐个初始化。
对于 Triangular
类,默认的成员逐个初始化可以正确复制类的数据成员,不需要我们做额外的操作。但对于 Matrix
类,默认的成员逐个初始化行为就不适用了。例如:
{
Matrix mat(4, 4);
{
Matrix mat2 = mat;
// 使用 mat2
// mat2 的析构函数被调用
}
// 使用 mat
// mat 的析构函数被调用
}
在这个例子中, mat2._pmat
会被初始化为 mat._pmat
,这会导致两个 _pmat
指向堆内存中的同一个数组。当 mat2