在C ++中将局部变量传递给函数的最佳方法

时间:2016-06-20 12:42:10

标签: c++ parameter-passing

我只是想知道将局部变量传递给函数的最佳方法是什么。

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用于分配内存并返回一个指针然后传递给函数。这是一个更好的方法来完成相同的任务,因为变量没有被删除吗?

1 个答案:

答案 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中的对象,所以它就像局部变量那样被破坏了,所以在这种情况下,动态分配没有任何优势。