gpt4 book ai didi

c++ - 使用后需要删除 CString 以释放内存吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:07:33 26 4
gpt4 key购买 nike

如果我使用这样的 CString:

void myFunc(char *str)
{
CString s(str);
// Manipulate other data with CString
// ...
// Finished

// Should I somehow delete 's' here to avoid a memory leak?
}

一旦函数超出范围,字符串是否被删除?

另外,我知道new关键字分配内存,如果我构造一个没有new关键字的对象,是否仍然分配内存?我的直觉告诉我是的,但我想验证一下。

例如

CString *asdf = new CString("ASDF");
// same as?
CString asdf("ASDF");

最佳答案

newheap 上分配内存,所以

CString *asdf = new CString("ASDF");

在堆上分配一个 CString 并将指向它的指针分配给 asdf。在您调用 delete asdf 之前,不会释放该内存,也不会调用 asdf 的析构函数。

如果没有 new,您将在堆栈 上进行分配,所以

CString asdf("ASDF");

分配栈内存,asdf代表。当堆栈展开时(就像从函数返回时一样),此内存会自动回收,并且 asdf 的析构函数会在超出范围时自动调用。

此外,CString 会清理它自己的资源,因此如果 CString 对象被清理(如果它在堆栈上则超出范围,或者如果它在堆栈上则被删除堆),它使用的资源也将被清理。

关于c++ - 使用后需要删除 CString 以释放内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937421/

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