面对大型程序:C/C+语言struct深层探索(5) | |||||||||
---|---|---|---|---|---|---|---|---|---|
http://www.sina.com.cn 2005年08月12日 18:42 太平洋电脑网 | |||||||||
文/宋宝华 4. struct编程注意事项看看下面的程序: 1. #include <iostream.h>
13.instant2 = instant1; 14.cout << *(instant1.cMember) << endl; 15.*(instant2.cMember) = 'b'; 16. cout << *(instant1.cMember) << endl; 17. return 0; } 14行的输出结果是:a Why?我们在15行对instant2的修改改变了instant1中成员的值! 原因在于13行的instant2 = instant1赋值语句采用的是变量逐个拷贝,这使得instant1和instant2中的cMember指向了同一片内存,因而对instant2的修改也是对instant1的修改。 在C语言中,当结构体中存在指针型成员时,一定要注意在采用赋值语句时是否将2个实例中的指针型成员指向了同一片内存。 在C++语言中,当结构体中存在指针型成员时,我们需要重写struct的拷贝构造函数并进行“=”操作符重载。 |