其中一个cpp文件具有使用“new”运算符创建的结构指针。该指针应该被明确删除吗?或者指针是否自动删除?
答案 0 :(得分:7)
C ++(通常)没有自动内存管理。要释放该对象的内存,您可以使用 delete 。 当使用时,它是一个不同的问题。
编辑:此外,当函数返回时,指针将被删除(或将被覆盖在堆栈上),但指向的对象将保留在堆中直到你删除它。
答案 1 :(得分:1)
使用'new'关键字将在堆上分配内存,就像'malloc'在C中所做的那样。要在完成使用后恢复内存,你必须在'删除'上执行指针从'new'返回。
当某个对象的生命周期没有扩展到实例化的函数之外时,这很容易,但是当这些对象被返回或添加到集合中时会变得更复杂......
答案 2 :(得分:1)
正如@Jared Updike所说,你必须自己做。这就是智能指针(如Boost和C ++ 0x中的指针)如此广泛使用的一个原因 - 它们是管理底层原始内存指针的轻量级类,以避免在忘记delete
时(而不是)忘记内存泄漏或delete[]
原始指针。
如果您是C ++的新手,请自己帮助take a look at those(scoped_ptr
,shared_ptr
等。
答案 3 :(得分:1)
如果您正在寻找更简单的内存管理,您可能需要查看Shared Pointers。它们是一种方便的方法,可以确保在使用correclty时释放内存。