我只是想知道将局部变量传递给函数的最佳方法是什么。
void check2 (int* var2){
*var2=7;
}
void check1 (int& var){
var=6;
}
int main()
{
int var;
int* var2=new int;
check1(var);
check2(var2);
delete var2;
return 0;
}
在check1
中,我使用引用传递变量。当我将一个局部变量传递给函数check1
时,一旦主要终止并且不再有变量,它是否会超出范围?
我找到了几个例子,operator new
用于分配内存并返回一个指针然后传递给函数。这是一个更好的方法来完成相同的任务,因为变量没有被删除吗?
答案 0 :(得分:1)
[什么是]将局部变量传递给函数的最佳方法
取决于你传递变量的原因,以及你用它做什么。
传递引用意味着该函数不占用该对象的所有权,并且该函数显然不占用所有权,因此这是合适的。传递一个简单的指针对所有权的更改是模棱两可的,所以在这种情况下,引用更好。
当我将一个局部变量传递给函数check1时,一旦主要终止并且不再有变量,它是否会超出范围?
正确。但是,在const webpackConfig = {
devtool: false,
plugins: [
new webpack.SourceMapDevToolPlugin( {
moduleFilenameTemplate: 'file://[absolute-resource-path]',
fallbackModuleFilenameTemplate: 'file://[absolute-resource-path]?[hash]',
noSources: true
} )
],
...
};
返回后对象是否存在,大多与如何将对象传递给main
内的函数的问题正交。
还要意识到在main
返回后,整个程序即将终止。唯一需要在该点存在对象的情况是,该对象是否由具有静态存储的另一个对象的析构函数所依赖。
我找到了几个例子,其中operator new用于分配内存并返回一个指针,然后传递给函数。这是一个更好的方法来执行相同的任务,因为变量不会被删除吗?
如果确实需要在main
中创建对象,但在main
完成后需要该对象存在,那么动态分配是实现该目标的一种方法。静态存储可能是另一种选择。
然而,在这个例子中,你删除了main中的对象,所以它就像局部变量那样被破坏了,所以在这种情况下,动态分配没有任何优势。