C++11 堆栈分配与 Unique_Ptr

标签 c++ variables c++11 stack unique-ptr

<分区>

我正在使用 C++11。我意识到我可以这样做并在堆栈上分配:

void someclasS::somefn(int naz) {
    Ipp32f absValues[naz] // <--naz is dynamic
    //.....more code
    //.....
}

我以为我不应该能够做到这一点? 以前我是这样做的:

std::unique_ptr<Ipp32f[]> absValues(new Ipp32f[naz]); 
// when need to pass pointer have to use absValues.get()

避免必须删除内存。

如果可能的话,我非常想做前者,因为它看起来更整洁。但这样做的后果是什么,如果有的话?

最佳答案

之所以有效,是因为编译器接受了 VLAs即使它们不是 C++ 中的标准。

正如 Humam Helfawi 所说,正常的方法是使用 std::vector

不允许 VLA 的基本原理是您确定没有堆栈溢出,因为大小有上限(在这种情况下,只需分配该大小),或者数量是无限的,您确实应该分配它在免费存储上,因为这样可以更好地处理内存不足的情况。

关于C++11 堆栈分配与 Unique_Ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893920/

相关文章:

c++ - 如何使用运算符来否定谓词函数!在 C++ 中?

c++ - 如何在 C++ 头文件中定义字符串参数 - 与 Swift 桥接?

c++ - 找到两个整数,使得它们的乘积接近给定的实数

c++ - 如何在 C++ 中初始化多个局部变量

c++11 - 如何使用 cmake 测试我的库中的 static_assert?

c++ - 添加到文件而不删除里面的内容

php - 如何将 HTML 标签的类值传递给 php 变量

c# - 静态方法中的变量是否会自动变为静态,因为它们在 c# 中的静态范围内?

c++ - <regex> 库是否正常工作?

c++ - 错误代码与错误条件