使用 ** 或 *& 为函数中的参数分配内存
Allocating memory for an argument in a function using ** or *&
关于如何为函数中的参数分配内存,我看到了两种不同的解决方案:
使用**:
template <class T>
void funcPP(T ** ppnDynamicInt) {
*ppnDynamicInt = new T;
}
与
使用*&
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
是null指针,*ppnDynamicInt = new T;
可能会导致未定义的行为。除此之外,它们是相同的(除了funcRP
使用更简洁的语法)
注意:根据您使用函数的方式,您可能需要删除以前的值,例如delete pnDynamicInt
。
编辑:我所说的"保证"是指没有未定义的方式来拥有null引用,而null指针是定义良好的。
我更喜欢funcPP,因为它在调用站点上更明确地表明指针可能会被更改。
相关文章:
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- C++具有模板成员变量的类. 和参数内存输出
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 为模板参数类型中的新对象分配内存
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 如果我提前将参数声明为变量而不是将它们内联写入函数调用,那有什么区别(在内存方面)?
- 抛出新表达式的参数子表达式时释放内存
- C++默认参数通过_CrtMemDifference屏蔽内存泄漏检测
- 温度参数数组的内存泄漏
- 将参数传递给const在内存中的副本的功能
- 正确对齐内存模板,参数顺序不变
- Google模拟:如何在模拟参数中从指针中复制内存
- JNA 参数问题:内存访问无效
- 是否可以强制对C中的指针参数进行内存对齐
- 如何根据模板参数控制内存分配
- 为作为双指针传递的参数分配内存
- 使用动态参数提升内存池
- 为多线程将结构内存分配给参数
- 奇怪的DllImport问题,当传递一个LONG参数内存损坏