【发布时间】:2018-02-26 22:13:22
【问题描述】:
看看下面的代码sn-p:
//A.h
class A
{
void f();
};
//A.cpp
#include "A.h"
void A:f()
{
map<string, string> *ThisMap = new map<string, string>;
//more code (a delete will not appear)
}
//main.cpp
#include "A.h"
int main( int argc, char **argv )
{
A object;
object.f();
//more code (a delete will not appear)
return 0;
}
当 main() 结束执行时,对象将被销毁。分配给 ThisMap 的动态分配内存也会被破坏吗?
【问题讨论】:
-
是的
object将被销毁并从内存中删除。 然而您在A::f中分配的内存将不会被释放(由您的程序),因此您将发生内存泄漏。经验法则:delete你是什么new和delete[]你是什么new[]。 -
静态对象在哪里?
-
除此之外,动态分配标准容器通常是非常不寻常的,而且在大多数情况下确实不需要。如果出于某种原因,它 是 需要的,那么使用例如
std::unique_ptr. -
好的!谢谢!在这种情况下,我无法修改代码,我正在对其进行测试,而 CppUTest 没有向我报告泄漏。我放了一个类似的 sn-p 并且没有使用 std::unique_ptr。
标签: c++ oop memory-management dynamic-memory-allocation