有一点不懂,请赐教。
以下(客户端代码)之间有区别吗? 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/