如果我有以下内容:-
struct foo
{
int a;
int *b;
} bar;
void baz(struct foo qux)
{
}
我是否正确地认为将 bar
传递给 baz()
导致将 bar
的局部副本推入堆栈?如果是这样,那么这是什么类型的副本?在C++中,我假设它会调用复制构造函数或默认复制构造函数,但我不知道这在C语言中如何工作。
C语言有默认复制构造函数的概念吗?这个构造函数有名称吗?可以通过某种方法执行深度复制吗?(假设)我唯一想到的方法是先进行深度复制,然后再将其传递给函数。
通常情况下,我会传递一个指向 foo
的指针,但我只是好奇它是如何工作的。此外,我认为传递指针更快、节省内存,并且是执行此类操作时推荐采取的行动。我猜它是浅复制;这可以改变吗?
std::vector
,...)中经常这样做。而在C语言中,则没有自动机制,您必须提供自己的函数(手动调用)来执行深度复制。顺便说一句,对于某些人来说,这被视为优点,因为某些对象的“默认深度复制”策略,如果不理解得好,可能会导致相当大的减速。与Java或C#进行比较,其中默认情况下通过引用传递对象,但可以选择提供Clone
方法来执行深度复制。 - Matteo ItaliaICloneable
,你是对的,这与C ++复制构造函数/赋值运算符的问题相同(深/浅语义可能因类而异)。 - Matteo Italia