首先我们需要理解:
1.默认复制构造函数不会创建临时对象,就像你自己定义的复制构造函数的参数是引用类型一样。
2.默认的复制构造函数是浅拷贝,也就是说如果被复制对象有一个内置指针成员,复制后的对象跟被复制的对象都有一个指向同一块内存的指针成员,即拷贝的是指针地址而不是内存。
3.基于第二点,如果析构函数有delete指针操作,那么只要任何一个对象被析构,则所有对象指向的这一块内存的空间被回收。
4.默认构造函数不会释放内置指针指向的内存空间。也就是说new出来的需要自己delete掉。
追问但我在看c++prime plus中,默认复制构造函数创建的临时对象过期时,调用了析构函数,但没有delete new出来的空间
追答我说的不会创建临时对象是在构造期间。你说的这个临时对象应该是指,比如调用方法void set(A a);时,因为参数a不是引用类型,所以在调用时会进行隐式拷贝,即调用A类型的拷贝构造函数创建临时对象a,在set方法调用返回后,临时对象a会被销毁,即调用A类型的析构函数。我上面已经说过,默认的析构函数不会释放指针指向的内存。
追问谢谢