关于带指针的结构体的复制问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 17:20:35
有很多带有指针的结构体,需要分别复制到内存中,怎么实现?
这个我看过了,现在的问题是,有很多这样的结构都需要复制,然后集体打包,如果要专门写宏来处理的话,拿岂不是每个结构都要写?

添加一个 成员函数

//假设struct A

A* function()
{
A *tmp=new A(*this);//直接通过 拷贝构造函数,在堆中分配就可以了
//当然 拷贝构造函数,你只要 把*this中的指针的值赋值给新的 A
//而且 你要保证*this所指向的 内存的 东西不会随着*this的释放而释放
return tmp;
}

根据你的需要撒。
看看是共享内存还是不共享内存、
如果不共享内存就需要直接实现Copy方法。
C里边可以是自定义函数。C++里边实现Copy构造函数就可以了。
如果要共享内存C麻烦点。c++直接用boost.shared_ptr就可以了,效率很高。

看看下面这块伪代码:
typedef struct{
...;
point *pD;
}struct;

struct A,B;

MALLOC(A);
MALLOC(A.pD);
MALLOC(B);

memcpy(B,A,sizeof(struct));

此时如果当A.pD被其他模块释放后,B.pD就不能使用了。此时的B.pD是野指针。也就是说,当你从传入参数或是什么其他地方拷贝一个结构体过来时,如果结构体里面含有指针,你就要提起精神了,要么你重新分配一下这个指针,再拷贝一次,要么确保在函数出栈时使用完这个拷贝的结构体。否则,以后发生的事情就不在掌控之内,就是说会有潜在的死机。

带指针的struct就不赞成简单的用memcpy来复制使用,一般情况是写专门的宏来处理(初始化,复制和释放)!

编程不要怕麻烦,100万行的程序也是一个字一个字敲进去的。

伊·梵这话说的好!!!

给我个mu马C程序好吗