【发布时间】:2011-08-08 13:27:08
【问题描述】:
是的,我是那些从 Java 学习 C++ 的人之一,被自动垃圾收集器宠坏了。有一种特殊情况,我想知道我是否在泄漏内存。让我们在 C++ 中考虑:
bool *test = new bool(false);
test = new bool(true);
delete test;
我在这里泄漏内存了吗?或者我应该在分配新值之前先致电delete?像这样:
bool *test = new bool(false);
delete test;
test = new bool(true);
delete test;
我的直觉告诉我第一个是正确的,因为指针test 指向内存中的同一地址,并为其变量分配新值,不会更改此地址。或者new 运算符是否在内存中分配了不同的地址?谁能给我一个线索,还是我都弄错了?
【问题讨论】:
-
回复:“是的,我是那些正在学习来自 Java 的 c++ 的人之一。”然后我强烈建议您选择a good introductory C++ book 并假装您从未学过Java。 C++ 不是 Java。尝试在 C++ 中像 Java 一样编程只会导致眼泪和挫败感。 It's like using RegEx to parse HTML.
-
“被宠坏了”是一种委婉说法,如果我听说过的话。
-
很可能这正是他正在做的事情。
-
你真的需要在堆上分配'bool'吗?尤其是内置类型的单个值在堆上分配非常少见。在普通的 C++ 程序中,“new”的使用比在普通的 Java 程序中要少得多!
-
C++ 有自己的 GC 系统,其行为比 Java 更精细。你只需要使用它。使用
std::shared_ptr<int>而不是int*,您的所有问题都会随着垃圾收集器的工作而消失。但是您甚至不需要动态分配对象。只需使用bool而不是bool*
标签: c++ memory pointers new-operator memory-leaks