2010-05-03 96 views
1

想驗證我對這是如何工作的理解。
有一個C++類與一個公共實例變量:C++實例化問題

char* character_encoding; 

,其唯一的構造被定義爲:

TF_StringList(const char* encoding = "cp_1252"); 

當我在任一C++/CLI或C使用這個類++,第一件事我做的是聲明指針這個類的一個對象:

const TF_StringList * categories; 

再後來我實例吧:

categories = new TF_StringList(); 

這給了我一個指向TF_StringList類型的變量character_encoding設置爲「cp_1252」的對象的指針; 那麼,所有這些邏輯是否有效?

吉姆

+1

爲什麼有必要用可疑的前綴來污染這個問題「非託管」。也許我錯了,但我很確定Stroustrup從來沒有寫過一本書「非託管C++的設計和發展」。 – 2010-05-03 15:02:32

+0

沒錯,我向我們的祖先道歉 – 2010-05-03 15:06:27

+0

沒有構造函數的源代碼,我們就沒有辦法知道。順便說一句:管理與此無關,所以如果你收回了敏捷的評論,我會很感激,我是使用(普通)C++工作的數以百萬計的人之一:) – 2010-05-03 15:11:20

回答

1

我看到的一個問題是您的構造函數需要一個const char *,但是您將它存儲在char *中。這將導致編譯器抱怨,除非你拋棄了常量。 (或者,是否有任何理由不讓你的字段爲const char *?我看不到你需要編輯名字的字符......)

+0

澄清:我沒有寫TF_StringList類,它是我只有標題的第三方類。所以(1)我不知道構造函數中發生了什麼,並且(2)不能更改character_encoding上的修飾符。這是如何影響你的答案的? – 2010-05-03 15:02:18

+0

那麼,我們不能保證你通過構造函數是通過閱讀公共領域得到的 - 只有類的製造者可以保證,而且他們可能不會。 (該名稱可以轉換爲大寫,或者查找「最接近的匹配」等) – cHao 2010-05-03 15:15:08

+0

好吧,沒有計劃驗證公共字段的值,只是想知道TF_StringList對象已正確實例化,所以我可以開始使用它的insert(const char *)方法來加載它的值。謝謝 – 2010-05-03 15:19:25

1

我要說的是要看是什麼構造函數實際上確實。如果我們假設它這樣做:

TF_StringList(const char* encoding) 
: character_encoding(encoding) 
{ 
} 

然後你的邏輯成立。但它可以做任何事,你不會在構造函數參數和實例的成員變量之間顯示出連接。