【发布时间】:2011-08-30 14:48:32
【问题描述】:
来自 Java 背景,我正在尝试学习如何以最简单的方式在 C/C++ 中处理内存(取消)分配。
同事建议我只为成员变量分配内存,让栈处理局部变量。我不完全确定这个概念叫什么,但这意味着函数将像这样实现:
void inc(int x, int &y){
y=x+1;
}
另一种方法是:
int inc(int x, int &y){
y=x+1;
return y;
}
第一个禁止我在表达式中使用它,即:
int y;
inc(2,y);
inc(y,y);
第二个有,但不漂亮:
int y;
y=inc(inc(2,y),y);
在我弄乱我的代码之前,经验丰富的 C/C++ 程序员如何看待这种编码风格?
【问题讨论】:
-
如果您要一次增加一个,为什么不改用
operator++? -
@Rafe:哪段代码是“错误的”?我只问,因为both areperfectly fine。
-
我认为他的同事指的是 RAII 风格的 C++,而不是通过 ref 传递 POD 类型。基于堆栈的 POD 类型不需要“内存管理”。
-
我不知道为什么你的同事关于内存分配的建议会导致你以这种方式写
inc。我认为他的意思是如果你必须使用new(和delete),你应该只在构造函数中使用new,并将相应的delete放在析构函数中。这将避免大多数内存分配问题(内存泄漏、双重释放、悬空指针等) -
为什么是 C 标签? C 和 C++ 不是同一种语言。特别是,C 没有您所指的“通过引用”机制。所以你的问题对C来说真的毫无意义。