2015-09-29 82 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