6. 赋值的问题出在哪里
程序清单12.3将 headline1 赋给 knot:
knot = headline1:
为knot调用析构函数时,将显示下面的消息:
"Celery Stalks at Midnight" object deleted, 2 left
为Headline1 调用析构函数时,显示如下消息(有些实现方式在此之前就异常终止了):
"-|" object deleted, -2 left
出现的问题与隐式复制构造函数相同:数据受损。这也是成员复制的问题,即导致 headline1.str 和
knot.str指向相同的地址。因此,当对knot调用析构函数时,将删除字符串“Celery Stalks at Midnight”;当
对headline1调用析构函数时,将试图删除前面已经删除的字符串。正如前面指出的,试图删除已经删除的
数据导致的结果是不确定的,因此可能改变内存中的内容,导致程序异常终止。要指出的是,如果操作结
果是不确定的,则执行的操作将随编译器而异,包括显示独立声明(Declaration of Independence)或者释
放隐藏文件占用的硬盘空间。