结构体赋值的问题...

zhang1000 2002-06-21 11:08:39
一般认为结构体不能整体赋值,
但当结构体中不存在指针成员情况下,是否可以用memcpy(),memmove()等进行赋值呢?
对类而言又如何?
...全文
2791 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqing1128 2002-06-22
  • 打赏
  • 举报
回复
是啊
可以但结果可能不是你想要的结果。
若要赋值可以用赋值重载
duiduiblues 2002-06-22
  • 打赏
  • 举报
回复
只要你的指针控制的严格,任何对象都可以memcpy,这正是c/c++的双刃剑的一个表现---小心翼翼地写出功能强大灵活的程序
JiangJiayan 2002-06-22
  • 打赏
  • 举报
回复
但是按照ANSIC/89的定义,结构体可以整体复制。
例如:struct {
int a,b;
}x,y;
x=y;
只是Turbo C 2.0不支持罢了(太老了?)
可以参看《The C Programming Language》。
kof99th 2002-06-22
  • 打赏
  • 举报
回复
看看effictive c++中的内存管理和inside c++ object modal中的拷贝语意学,应该就明白了,不是一两句话可以说清楚的。
zheng_can 2002-06-22
  • 打赏
  • 举报
回复
防止两次 delete 指向同一地址的指针
andy_lau 2002-06-22
  • 打赏
  • 举报
回复
这就是为什么,当类中存在有成员指针的时候必须定义一个复制构造函数
LionEagle 2002-06-21
  • 打赏
  • 举报
回复
对于没有指针(或引用)的类以及C中的结构,直接赋值就可以了,没什么不安全的

对于C中结构,直接赋值与memcpy的汇编代码基本一样,但memcpy还有函数调用的开销

对于类,在上述的前提下,同一个类的不同对象之间赋值没什么问题
zhang1000 2002-06-21
  • 打赏
  • 举报
回复
"即使存在指针,也可以使用(编译无措),但结果可能不是你所希望的。"
排除存在指针的情况主要是因为怕误操作,一个指针多处引用.
对复制结果有和影响?
UP....

boxban 2002-06-21
  • 打赏
  • 举报
回复
但当结构体中不存在指针成员情况下,可以用memcpy(),memmove()等进行赋值。即使存在指针,也可以使用(编译无措),但结果可能不是你所希望的。

对于类,一般来讲用memcpy()是不安全的,也不是好的编程习惯,应该实现拷贝构造函数和=操作符。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧