我已经看到了两种不同的解决方案,如何为函数中的参数分配内存:
使用**:
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)
什么被认为是更安全/更好的风格?一种解决方案更有效吗?
(注意:我知道智能指针会更好:))
当你只显示了两个选择之间考虑,我建议funcRP,因为语言担保,pnDynamicInt永远不能为null(引用不能为空),但*ppnDynamicInt = new T;可能会导致不确定的行为,如果ppnDynamicInt是一个空指针.除此之外它们是相同的(除了funcRP使用更整洁的语法)
注意:根据您使用函数的方式,您可能希望删除以前的值,例如with delete pnDynamicInt.
编辑:通过'保证',我的意思是没有非未定义的方式具有空引用,而空指针是明确定义的.