corba - 使用 Corba string_dup 与使用指向 const 的指针

标签 corba

有一点不懂,请赐教。

以下(客户端代码)之间有区别吗? 1) blah = (const char *)"虚拟"; 2) blah = CORBA::string_dup("虚拟");

...只是谷歌搜索了一下我看到 string_dup() 返回一个 char * 所以 2 可能是等效的。 我在想 2) 做 2 个深拷贝而不是 1 个。

无论如何我现在都在解雇这个问题,请简单确认一下。

谢谢!

最佳答案

const char* blah = "dummy";

C++ 编译器在可执行文件的数据部分中的某处生成一个常量字符数组,以 null 结尾。 blah 得到一个指向它的指针。

char* blah = CORBA::string_dup("dummy");

函数 string_dup() 被调用时带有一个参数,该参数是指向该常量字符数组的指针。 string_dup() 然后从空闲存储分配内存并将字符串数据复制到空闲存储分配的内存中。指向自由存储内存的指针返回给调用者。调用者的工作是在完成 CORBA::string_free() 后释放内存。从技术上讲,允许 ORB 实现使用一些特殊的自由存储,但很可能它只是使用您的应用程序的其余部分正在使用的标准堆/自由存储。

这样做通常要好得多:

CORBA::String_var s = CORBA::string_dup("dummy");

String_var 的析构函数将在 s 超出范围时自动调用 string_free()

关于corba - 使用 Corba string_dup 与使用指向 const 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856441/

相关文章:

python - CORBA python 文件在目录树中的级别与导入它们的模块不同

java - 调用 "servant_to_reference"后丢弃 CORBA 中的仆人

java - CORBA-JacORB : Use fixed port generating IOR?

java - org.omg.CORBA.TRANSIENT : initial and forwarded IOR inaccessible vmcid: IBM minor code: E07 from stand-alone app

java - Corba - 唯一用户 ID

java - 在 Java 中运行嵌入式 CORBA 命名服务

java - 当对象被调用时,如何在 Eclipse 中进行调试?

java - Corba COS 命名服务列出所有节点

c++ - CORBA : How to pass a QT object as a parameter

rpc - gRPC 和 CORBA 有什么区别?