函数内存管理C++

Pyj*_*ong 4 c++ memory-management function

我有一点点蹩脚的问题,但现在是时候我终于清楚了.考虑具有一些参数和返回类型的常规函数​​.

我的问题是:

  1. 总是有一些参数副本?我的意思是即使函数需要引用或指针作为参数,实际上还是创建了新的引用/指针,对吧?当函数结束时是否有一些析构函数要求那些?

  2. 返回值是否相同?是否还从实际执行的函数的上下文中复制了返回值?或者那些只是某处的地址而且上下文中的值也被破坏了?

我可能没有太清楚地表达它...如果你只是按照自己的方式解释当一些函数被调用时它如何与内存一起工作我会很感激.我对处理器的功能只是偶然的想法,但我已经处理了汇编程序,所以至少有一些东西可以使用.

小智 6

与C一样,C++是一种按值调用的语言,因此通常会创建参数副本.

什么时候:

void f( int x ) {
}
Run Code Online (Sandbox Code Playgroud)

被调用,其参数的副本被生成并传递给函数.什么时候:

void f( int * x ) {
}
Run Code Online (Sandbox Code Playgroud)

调用指针的副本并传递给函数.

例外情况是使用引用时:

void f( int & x ) {
}
Run Code Online (Sandbox Code Playgroud)

没有复制,但内部指针(可能)用于传递参数的地址 - 但是你不应该考虑这个.

完全相同的事情适用于返回值:

int f() {
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

制作值1的副本并将其返回给调用者.如果函数返回指针,则会生成指针的副本.再一次,引用是例外,因为没有复制,但在内部指针(可能)用于返回值.