首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11堆栈分配与Unique_Ptr

C++11堆栈分配与Unique_Ptr
EN

Stack Overflow用户
提问于 2016-01-20 07:28:21
回答 2查看 918关注 0票数 1

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

代码语言:javascript
复制
void someclasS::somefn(int naz) {
    Ipp32f absValues[naz] // <--naz is dynamic
    //.....more code
    //.....
}

我以为我不能这么做?以前我是这样做的:

代码语言:javascript
复制
std::unique_ptr<Ipp32f[]> absValues(new Ipp32f[naz]); 
// when need to pass pointer have to use absValues.get()

以避免不得不删除内存。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 07:38:39

这是因为编译器接受VLAs,即使它们在C++中不是标准的。

通常的方法是像Helfawi所说的那样使用std::vector

不允许VLAs的理由是,要么您确信没有堆栈溢出,因为大小有上限(在本例中只是分配该大小),要么数量是无限的,您确实应该在空闲存储上分配它,因为这样可以更好地处理内存不足的情况。

票数 3
EN

Stack Overflow用户

发布于 2016-01-20 07:32:29

如果可能的话,我非常想做前者,因为它看起来更整洁。

只需使用std::vector

代码语言:javascript
复制
std::vector<Ipp32f> absValues(naz);

如果您有一个带有此声明的函数,则结果是连续的:

代码语言:javascript
复制
ppsZero_32f(Ipp32f* ptr, int len);

你可以这样传递你的向量:

代码语言:javascript
复制
ppsZero_32f(absValues.data(),absValues.size());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34893920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档