c++ - 本地数组的性能和安全性作为参数

标签 c++ performance memory stack function-calls

我只是想确保这没有任何潜在的问题。它编译并运行良好,但我是否冒着任何奇怪的内存效应的风险?在这种情况下,我是否需要特别关注异常情况?

//...constructor of some class
myobj(int length, int *vars)
{
    // do stuff with vars
}

// inside some other code somewhere
int vars[3] = {5,6,7};
myobj *o = new myobj(3,vars);

(编辑。)我只是担心,因为我知道应该始终谨慎使用指向堆栈上对象的指针。要具体说明我的用法,我主要喜欢以最快的方式传递相同类型的可变数量的参数。那么这是一种糟糕的方法吗?谢谢..

后记。所有的答案都非常有帮助,谢谢!我会看看性能是否足够重要以使用此方法,或者我是否可以完全以另一种方式解决问题。

最佳答案

本质上没有错。但是,您需要注意以下几点:

  • 不要保留指向vars 的指针在你返回之后(或者至少在它超出范围之后)。 vars仅在您离开声明它的范围之前有效。
  • 确保你没有跑完 vars 的尽头数组。

这是 C++ 中更常用的样式,例如一个std::vector<int> &参数,或其他一些容器类型。这有两个主要原因:通过作为引用传递,它更明显地表明您可能不打算保留指向对象的指针,并且通过传递 vector ,数组的大小与数组一起保持不变本身(如果需要,您也可以扩展数组)。但是,这是样式问题,vector 有开销。 ,所以如果性能非常重要,这种方法是完全合理的。

关于c++ - 本地数组的性能和安全性作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616618/

相关文章:

c++ - 为什么在 OpenGL ES 2.0 中不需要 push/pop 矩阵等价?

c++ - 在 const 函数中使用安全的非常量函数

c++ - 如何从 ip 地址或 sockaddr_in 结构(C++/WinAPI)获取主机名?

algorithm - 为什么 KNN 的余弦距离比欧几里得距离快得多?

performance - 为什么类型提示不能提高这个函数的性能?

linux - 绩效评估中的异常值

c - 共享内存中数组的长度是多少?

使用 Node.js 服务器调试内存泄漏

内存使用

c++ - X Window 系统上的顶级窗口