有什么不明白的,请赐教。
以下(客户端代码)之间有区别吗?1) blah = (const char *)"dummy"; 2) 等等 = CORBA::string_dup("dummy");
...只是谷歌搜索了一下我看到 string_dup() 返回一个 char * 所以 2 可能是等价的。我在想 2) 做 2 个深拷贝而不是 1 个。
无论如何,我现在要提出这个问题,请简要确认。
谢谢!
有什么不明白的,请赐教。
以下(客户端代码)之间有区别吗?1) blah = (const char *)"dummy"; 2) 等等 = CORBA::string_dup("dummy");
...只是谷歌搜索了一下我看到 string_dup() 返回一个 char * 所以 2 可能是等价的。我在想 2) 做 2 个深拷贝而不是 1 个。
无论如何,我现在要提出这个问题,请简要确认。
谢谢!
const char* blah = "dummy";
C++ 编译器在可执行文件的数据部分的某处生成一个以空字符结尾的常量字符数组。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