endl;
}

由于p1在建立时,调用的构造函数里给数据成员分配了堆空间

所以在p2建立时,调用了默认拷贝构造函数,拷贝了p1.pName,此时p1.pName已经指向了一个堆地址

所以p2.pName指向了和p1.pName一样的地址,在p2,p1的析构函数先后调用时,p1的析构函数打印的将是"Destructing"+随机数,

并且运行到delete pName时报错,因为这个空间已经在p2析构时释放了。

所以在构造函数里有分配空间的操作,定要显示给个拷贝构造函数让它不紧拷贝成员也拷贝资源

拷贝构造函数格式为

Person(Person&p)
{
//c++学习笔记14------------------------拷贝构造函数c++学习笔记14------------------------拷贝构造函数}

如果你的类需要一个析构函数来释放资源,就需要一个深拷贝构造函数(未拷贝资源的称为浅拷贝)

还有c++编译器给我们的构造函数附加了个有趣功能-----试探性的类型转换

class T
{
    
public T(char *)
    {
//c++学习笔记14------------------------拷贝构造函数..};
}

void fn(T &t)
{
//c++学习笔记14------------------------拷贝构造函数..}

void main()
{
    fn(
"Anncesky");
}

 fn("Anncesky");当然会先去找 fn(char *)的声明的函数,找了一遍,发现没有,唉,正在叹气呢,万绿丛中一点红啊

发现了fn(T &t);虽然参数类型不匹配,还没绝望,假如万一可能也许

T类型的构造函数的参数只有一个,并且类型是char *

我就成全这串狗字符串吧,于是在编译器的打扮下,"Anncesky" 变成了 T("Anncesky")----无名对象 传递给fn

相关文章:

  • 2021-09-02
  • 2021-10-31
  • 2021-07-06
  • 2021-07-12
  • 2021-10-03
  • 2021-11-21
猜你喜欢
  • 2021-11-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-18
  • 2021-10-16
相关资源
相似解决方案