加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用**或*&为函数中的参数分配内存

发布时间:2020-12-16 10:02:13 所属栏目:百科 来源:网络整理
导读:我已经看到了两种不同的解决方案,如何为函数中的参数分配内存: 使用**: template class Tvoid funcPP(T ** ppnDynamicInt) { *ppnDynamicInt = new T;} VS 使用* template class Tvoid funcRP(T * pnDynamicInt) { pnDynamicInt = new T;} 使用函数的示例
我已经看到了两种不同的解决方案,如何为函数中的参数分配内存:

使用**:

template <class T>
void funcPP(T ** ppnDynamicInt) {
    *ppnDynamicInt = new T;
}

VS

使用*&

template <class T>
void funcRP(T *& pnDynamicInt) {
    pnDynamicInt = new T;
}

使用函数的示例 – >

int * pnDynamicInt;
funcPP(&pnDynamicInt);
funcRP(pnDynamicInt);//memory leak I know ;)

什么被认为是更安全/更好的风格?一种解决方案更有效吗?

(注意:我知道智能指针会更好:))

解决方法

由于您只考虑显示的两种替代方案,
我建议使用funcRP,因为语言保证pnDynamicInt永远不为null(引用不能为null)但是* ppnDynamicInt = new T;如果ppnDynamicInt是空指针,则可能导致未定义的行为.除此之外它们是相同的(除了funcRP使用更整洁的语法)

注意:根据您使用函数的方式,您可能希望删除以前的值,例如使用delete pnDynamicInt.

编辑:通过’保证’,我的意思是没有非未定义的方式具有空引用,而空指针是明确定义的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读