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

A.F*_*ell 3 c++

我已经看到了两种不同的解决方案,如何为函数中的参数分配内存:

使用**:

template <class T>
void funcPP(T ** ppnDynamicInt) {
    *ppnDynamicInt = new T;
}
Run Code Online (Sandbox Code Playgroud)

VS

使用*&

template <class T>
void funcRP(T *& pnDynamicInt) {
    pnDynamicInt = new T;
}
Run Code Online (Sandbox Code Playgroud)

使用函数的示例 - >

int * pnDynamicInt;
funcPP(&pnDynamicInt);
funcRP(pnDynamicInt);//memory leak I know ;)
Run Code Online (Sandbox Code Playgroud)

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

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

Isa*_*aac 6

当你只显示了两个选择之间考虑,我建议funcRP,因为语言担保,pnDynamicInt永远不能为null(引用不能为空),但*ppnDynamicInt = new T;可能会导致不确定的行为,如果ppnDynamicInt是一个空指针.除此之外它们是相同的(除了funcRP使用更整洁的语法)

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

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