1.调用拷贝构造函数的时机:
(1)使用 = 时会发生。
(2)将一个对象作为实参传递给一个非引用类型的形参。
(3)从一个返回类型为非引用类型的函数返回一个对象。
2. 析构函数的调用时机:
(1)变量离开作用域时被销毁,调用析构函数。
(2)一个对象被销毁时,其成员被销毁。
(3)容器被销毁时,其元素被销毁。
(4)new出来的对象,被delete时,调用析构函数。
(5)临时对象,如传递参数时,当创建它的完整表达式结束时被销毁。
3.在使用delete时要注意一个问题,当一个指针被delete了,它所指向的内存区域就已经被释放了。而不能再delete,会出现异常。更严重的,如果该段内存被其他内容占用了,会有更严重的后果。所以在delete一个指针之后,最好将其置为NULL。但是也不是好的方法,因为同一块内存区域,可能有好几个指针指向,虽然delete了其中一个,并置空,但是其他的仍然可以delete,发生意向不到的后果。
A* pa = new A();
A* pa1 = pa;
delete pa;
pa = nullptr;
delete pa1;
所以在delete时一定要谨慎。
最好使用的是只能指针,不过这个还木有掌握,有待填坑。