在函数的形参中创建的对象是否被复制到两个堆栈中?

本文关键字:两个 堆栈 形参 函数 创建 对象 是否 复制 | 更新日期: 2023-09-27 18:04:28

如果类x通过y.create(new z)调用y,是否在x的堆栈中创建z对象以及y的堆栈?这是假设我们通过值传递,而不是ref/ptrs

在函数的形参中创建的对象是否被复制到两个堆栈中?

以下几点:

堆栈/堆位于进程(应用程序)级别,而不是对象级别。整个应用程序共享一个堆栈(至少在你的问题上下文中),无论它使用多少对象。

除非"z"在您的示例中是值类型(如结构体),它不会完全驻留在堆栈上。如果"z"是一个类,那么它就"活着"。在堆上,只有一个对它的引用。

你真的应该读一读Jon Skeet的简短解释,尤其是"一个有效的例子"。

对象z在应用程序分配的内存中创建。当使用new创建对象时,每个函数没有自己的内存区域。

我建议你仔细阅读本页的内容,我确实发现它有时很有用(例如当我把事情弄混的时候)