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