2013-02-13 76 views
2

有些東西我不明白,請賜教。使用Corba string_dup與使用指向const的指針

以下(客戶端代碼)有區別嗎? 1)blah =(const char *)「dummy」; 2)blah = CORBA :: string_dup(「dummy」);

...只是用google搜索一下我看到string_dup()返回一個char *,所以2可能是等價的。 我在想2)做2個深拷貝而不是1個。

我現在發問了,請簡單確認一下。

謝謝!

+0

is this javacorb? – Makah 2013-02-14 12:00:48

+0

這是Orbix Corba impl(C++)。 – 2013-02-17 09:41:39

回答

5
const char* blah = "dummy"; 

C++編譯器會在可執行文件的數據部分的某處生成一個常量數組,其字符數爲空值。 blah獲取一個指向它的指針。

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

函數string_dup()被調用,該參數是指向該常量字符數組的指針。 string_dup()然後從空閒存儲中分配內存並將字符串數據複製到free-store分配的內存中。指向免費存儲器的指針返回給調用者。當完成CORBA::string_free()時,處理內存是來電者的工作。從技術上講,允許ORB實現使用一些特殊的免費商店,但很可能它只是使用應用程序其餘部分所使用的標準堆/免費商店。

它往往是更好的做到這一點:

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

String_var的析構函數會自動調用string_free()s超出範圍。

相關問題