【发布时间】:2015-09-29 04:03:11
【问题描述】:
我是C 的新手,想问一个关于复制行为的问题。我正在阅读Scott Meyers'C++,他在书中说C++ 可以被认为是一种语言的组合,我们应该将所谓的C 部分 与C++ 部分区分开来。现在,如果我们必须使用包含以下内容的原生 C API:
FontHandle getFont(); //From, C API
void releaseFont(FontHandle fh); //From the same C API
据我所知,C 语言不允许通过 copy-custructors 定义自定义复制行为。那么,如果我写以下内容,我应该期待发生什么:
FontHandle f1 = getFont();
FontHandle f2 = f1; //What's going to happen here? Deep or shallow copy?
【问题讨论】:
-
FontHandle大概是指针或整数类型的typedef,当你说char* a; char* b = a;时,你认为会发生什么? -
如果这是C API,那么当然是浅拷贝。
FontHandle很可能是typedef'ed 为int或void*或类似的东西。如果您要问的话,仅仅分配一个句柄不可能克隆底层的字体对象。您最终会得到两个具有相同数值的变量。 -
这可能就是答案。 stackoverflow.com/a/9127315/1099230
-
@IgorTandetnik 你的意思是如果我们有一个指针可以输入 C,例如
char* a;然后写char *b = a,我们将拥有b是a的副本。但是如果我们有char a = 'a'; char b = a;呢?那么复制将如何进行呢? -
同理 -
b是a的副本。我不确定我是否完全理解您的困惑。