结构体直接赋值,可以吗?
B b1;
B b2;
……
b2 = b1;
那么,是不是b2中所有成员都等于b1中所有成员?
底层实现,其实是不是“整个结构体的内存拷贝”?
[解决办法]
对
因为是内存拷贝,所以指针也是原样拷过去,如果有动态分配就会出问题
[解决办法]
是的 字太少
[解决办法]
相当于一个默认赋值函数,按位copy过去的。
[解决办法]
浅拷贝,C/C++都一样
[解决办法]
可以。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
[解决办法]
调用赋值函数,
没有重载则调用默认的赋值函数(按位拷贝、浅拷贝)
[解决办法]
bitwise copy constructor
[解决办法]
成员没有指针或有拷贝函数的话可以
[解决办法]
当且仅当struct里只有基本数据类型时,=操作才是安全的,否则,你就要为copy操作编写特定的安全代码。
如果struct内的指针*并不在~struct里释放的话,*的=操作也是安全的(这在一些缓冲池操作中特别有效)。
[解决办法]
结构体的赋值仅仅是简单的浅复制,如果涉及到指针类型就会出问题,比如:
struct BirthDay
{
int m_Year;
int m_Month;
int m_Day;
};
struct stu
{
int m_Age;
char m_Sex;
BirthDay *bd;
};
涉及到指针的,赋值时仅仅将指针复制一份,stu s2 = s1(假设s1已经是一个完整的对象);这时候s1和s2的指针字段都是指向同一个BirthDay匿名对象的,其中s1或是s2销毁会带来另一个对象的指针出错