当一个对象的指针返回并且程序员忘记删除它时,大部分内存泄漏出现.
例如:
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)
解决方法
原文地址:https://www.jb51.cc/c/112663.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。