有些事情我没有得到,请赐教。
以下(客户端代码)之间是否有区别? 1)blah =(const char *)“dummy”; 2)blah = CORBA :: string_dup(“dummy”);
...只是谷歌搜索我看到string_dup()返回一个char *所以2可能是等价的。 我在想2)做2份深拷贝而不是1份。
我现在正在解决这个问题,请简要确认一下。
谢谢!
答案 0 :(得分:6)
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
超出范围时,string_free()
的析构函数会自动调用s
。