【发布时间】:2021-07-30 02:09:54
【问题描述】:
int* integer = new int{10};
cout << *integer << endl;
free(integer);
cout << *integer << endl;
输出:
10
0
根据我在我的机器上测试过的代码,很明显分配的内存被free()成功释放了
但是网上有文章不鼓励使用new操作符和用free()解除分配
如果有,是否存在内存泄漏的可能性。任何人都可以粘贴发生这种类型泄漏的示例代码
【问题讨论】:
-
如果它们不是整数,如果你新建了一堆 std::string 然后释放了你会泄漏的数组,因为这些字符串的 dtor 不会被调用。
-
一句话:不要!
-
用
free()释放new的内存是未定义的行为。 可能new可以在内部使用malloc(),但不要依赖于此。free()肯定不会在非平凡类型上调用任何析构函数。因此,请始终使用delete来释放new的内存。 -
new不需要使用malloc。通常它确实如此,但除非你有绝对令人信服的理由来打破 C++ 内存分配模型,否则使用delete获得的内存是通过new获得的,而delete[]获得的内存是通过new[]获得的。
标签: c++ memory-management memory-leaks