CORBA数据类型的内存管理与参数传递
1. 递归删除原则
CORBA数据类型的递归删除原则适用于所有类型和任意嵌套程度。例如,一个包含联合、 any 类型和结构体数组的结构体序列,每个结构体又包含字符串、 any 类型和联合,只需对父序列的指针调用 delete (假设它在堆上分配),就可以释放内存。
对于最顶层的父数据类型(如这里的序列),可以选择使用智能指针或普通指针。但对于嵌套在父类型中的数据类型,没有这种选择。序列的所有元素会随父序列自动删除,结构体的所有成员也会随父结构体一起删除。结构体中的任何指针成员会递归删除它们引用的内存,因为它们是智能指针。
不过,递归删除原则有两个例外。序列类型和 any 类型都提供了一种特殊的构造函数,可关闭智能内存管理行为,即不再拥有它们使用的内存。但使用此选项时要格外小心,因为可能会导致内存泄漏。
2. 赋值和复制
2.1 浅复制和深复制
CORBA数据类型的复制操作通常有两种有用的类型:
- 浅复制:只复制数据的指针,数据本身不复制。
//C++
SampleTypes::VarLen * p;
SampleTypes::VarLen * q;
// Allocate and Initialize original ‘VarLen’ struct
p = new SampleTypes::VarLen();
p->theString = CORBA::stri
超级会员免费看
订阅专栏 解锁全文
892

被折叠的 条评论
为什么被折叠?



