gpt4 book ai didi

c++ - 是否可以删除子函数中的对象?

转载 作者:行者123 更新时间:2023-11-28 02:55:44 25 4
gpt4 key购买 nike

我在 C++ 中遇到内存泄漏问题。

我创建一个对象(新类型)并将其传递给子函数。我知道我必须删除对象以避免内存泄漏 - 但是,当我在子函数内对对象调用 delete 时,这会导致应用程序崩溃:

void subfunction (TYPE* oldObject,....) {
//deep-copy object
TYPE* object = new TYPE(oldObject->p1,oldObject->p2,....)
subfunction (object,....)
delete oldObject
}

这里有什么问题?我是否必须在创建对象的同一函数中删除对象?

我是否不允许删除函数中的对象,这是该函数的参数?

编辑:错误信息是'* `./a.out' 中的错误:free():无效大小:0x00007fff4fbe59c0 *'

最佳答案

What is the problem here?

您可能两次删除同一个对象。当您四处 throw 指针并希望某些东西在正确的时间删除它时,很容易做到这一点。

Do I have to delete an object in the same function it was created in?

可以在任何地方删除它(只要您只删除一次)。你不应该,因为杂耍指针几乎不可能确保你只做一次。

Am I not allowed to delete an object within a function, which was an argument to this function?

你可以;但你不应该,因为调用者将留下一个悬空指针。如果在对象被删除后它试图对它做任何事情,那么各种错误都会接踵而至。

避免new,除非你真的需要它;并使用智能指针管理您使用 new 创建的所有内容。然后您可以继续编写有用的代码,而不是调试摇摇欲坠的内存损坏堆。

关于c++ - 是否可以删除子函数中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com