2015-09-29 119 views
1

我在C中很新,想問一個關於複製行爲的問題。我在閱讀Scott Meyers'C++,他在書中說C++可能會被視爲語言的組成部分,我們應該從C++部分區分所謂的C部分。現在,如果我們不得不使用一些本地C API包含以下內容:複製C對象

FontHandle getFont(); //From, C API 

void releaseFont(FontHandle fh); //From the same C API 

據我所知,C語言不允許限定經過複製custructors一個自定義的複製行爲。那麼,如果我寫下如下內容,我應該會發生什麼:

FontHandle f1 = getFont(); 
FontHandle f2 = f1; //What's going to happen here? Deep or shallow copy? 
+0

'FontHandle'大概是一個'typedef'指針或整數類型的,當你說'char * a; char * b = a;'? – user657267

+0

如果這是C API,那麼當然是淺拷貝。 'FontHandle'很可能是'typedef''ed'int'或'void *'或類似的東西。僅僅分配一個句柄不可能克隆底層字體對象,如果這就是你所要求的。你最終會得到兩個變量保持相同的數值。 –

+0

這可能是答案。 http://stackoverflow.com/a/9127315/1099230 – luoluo

回答

3

C總是會做一個'淺'副本。如果變量是一個指針,則該值將被複制。如果變量是一個結構,結構的內容將被複制(如果內容碰巧包含指針,它們的值將像其他所有內容一樣被複制)。

+0

如果變量像'char'這樣的原始類型? – stella

+0

該值將被簡單地複製。無論變量是什麼,C都會簡單地將支持該變量的內存從一個地方複製到另一個地方。 – andars

0

如果對象FontHandle定義一個正確複製構造或提供正確執行操作者的=那麼你將不得不將深層副本(對象正確複製)

+0

它來自__C __- API。 – stella