对copy-constructor的一点理解
Memberwise Initialization
在默认情况下,当以某个class object作为另一个object的初值时,会发生成员逐一初始化,
1 | Example E1(8); |
class data member会被依次复制,即对象中的每个成员都会被复制到另一个对象的相应成员上。
对于这种情况:
1 | class Matrix { |
根据默认的成员逐一初始化,mat2._pmat = mat._pmat,所以这两个指针指向了同一个堆内存空间内的数组,当mat2的析构函数发生作用时,该内存空间便被释放,但是mat的指针还是指同一空间,此时再使用这个指针就会产生严重错误。