gpt4 book ai didi

c++ - 处理 IDL 序列返回类型的内存

转载 作者:行者123 更新时间:2023-11-30 02:50:19 27 4
gpt4 key购买 nike

我有一个idl定义如下

typedef sequence<octet> ByteArray;

interface Connection {
ByteArray get_id ();
}

还有这个客户端代码

ByteArray * idToEncrypt = connection->get_id();
encryptId(idToEncrypt);
... // rest of code

函数 encryptId() 具有签名 ByteArray* encryptId(ByteArray* idToEncrypt)。我无法更改此签名。

对于自动内存处理,idToEncrypt 的类型已更改为 ByteArray_var。问题是我不知道如何从 ByteArray_var 获取“ByteArray *”并将其传递给 encryptId()。

有没有一种方法可以自动处理分配给“idToEncrypt”的内存并仍然将其作为“ByteArray *”传递给 encryptId()?

最佳答案

你应该看看 _var C++ mapping在 CORBA 规范中。

对于序列类型 var,我认为最好的方法可能是使用 inout() 成员,即:

ByteArray_var idToEncrypt = connection->get_id();
encryptId(&idToEncrypt.inout());

inout 返回一个非常量引用,您只是使用 & 获取底层对象的地址。

请注意:inout 确实解引用了内部指针,因此在 _var 上调用 inout() 是非法的 没有指针。但是,对 get_id() 的调用必须始终返回一个有效的指针,因此代码无需检查就可以。

如果您需要一种不知道 _var 是否已初始化的通用方法,您可以使用:

ByteArray* p = idToEncrypt.operator->();

因为 operator-> 似乎是直接获取指针的唯一方法。

关于c++ - 处理 IDL 序列返回类型的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20541478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com