当一个对象的指针返回并且程序员忘记删除它时,大部分内存泄漏出现.
例如:
class my_class { ... }; my_class* func1() { my_class* c = new my_class; return c; } int main() { my_class* var1 = func1(); ... // Programmer forgot delete the var1: delete var1; // -- or -- // Doesn't know 'delete[] var1;' is correct or 'delete var1;'. }
当创建对象的指针和程序员忘记删除它时,会出现一些内存泄漏.
例如:
class my_class { ... }; void func2(my_class* p) { ... } int main() { my_class* var3 = new my_class; func2(var3); // Does func2 deletes var3? Programmer doesn't know. // -- or -- // Programmer forgot delete the var3. }
我的方法是:不要使用任何指针(除了一个地方),只需使用引用而不是指针.
例如:
class my_class { ... }; my_class& func1() { my_class* c = new my_class; // except one place. return *c; } void func2(my_class& p) { ... } int main() { my_class& var1 = func1(); my_class var2 = func1(); my_class var3; func2(var3); // There is nothing to forget. }
使用引用而不是指针,解决内存泄漏?
编辑:
这个问题的一些答案不同意下面的代码没有内存泄漏.
因为这是一个新的问题,我单独问.
class my_class { ... }; my_class& func() { my_class* c = new my_class; return *c; } int main() { my_class& var1 = func(); // I think there is no memory leak. }
我在这里问:
Does this code leak memory? (references,new,but no delete)