先来看一个普通类的直接赋值。看下边这个例子,这个类的构造函数需要申请堆内存:运行结果如下:这是这个程序进入 f() 函数时的内存情况,两个age指针指向同一块内存。这时候a.set()就会发生错误,因为内存已经释放,无权修改内存里的值。就算没有set()函数,main函数结束的时候还会产生doublefree的错误,同一块内存被释放两次,C++文档说明这是个未定义行为,所以不同编译器可能处理手段不一样,我的gcc 7.4.0 竟然没有报错。后来我又在网上的一些在线编译器实验一下,有的会报错,有的不会。
暂无评论