结构体拷贝时默认调用各个成员的拷贝赋值函数。

结构体中有数组,拷贝时使用memcpy或使用"="进行赋值都可以。memcpy和"="都可以将数组中的元素逐一赋值到目标结构体中的数组中。

结构体中有vector,只能使用"="进行赋值。使用"="可以调用vector的拷贝构造函数,将源结构体对象中vector的元素拷贝到目标结构体对象。而使用memcpy时,不会考虑到vertor的结构问题,通过打印源结构体和目标结构体中vector的地址发现:两个vector对象的地址相同,但vector中的元素如vector[0] vector[1]的地址各不相同(注意vector本身的地址与vector[0]的地址不同)。

结构体中有指针,使用memcpy或"=",都只能拷贝指针的值,即只拷贝地址,而不会重新申请一块内存空间来拷贝指针指向的内容,因为源结构体对象的指针和目标结构体对象的指针指向同一块内存,可能会存在内存问题,如重复delete

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐