内存泄漏 - C++,如果函数返回结构,我是否需要在使用后删除该结构
memory leaks - In C++, if a function returns a struct, do I need to delete the struct after using it?
typedef typedef struct _OBJTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} OBJTIME
OBJTIME objTime; //Note, this objTime is modified other function
OBJTIME ObjectParent::returnObjTime() const
{
return objTime;
}
我的问题是:
如果另一个类调用 returnObjTime(( 函数,比如:
OBJTIME t = objectP->returnObjTime((
我假设将创建 OBJTIME 结构的新副本?完成后是否需要删除变量"t"? 它会产生内存泄漏吗?
谢谢。
不,您返回的是全局objTime
的副本,副本和全局都有基于其作用域的持续时间,这意味着当它们的作用域结束时,它们将自动从内存中释放。
这是一个副本是的,但它不是由new
创建的,所以你不需要delete
它。
答案 1:是的,将根据调用函数的范围创建一个具有生存期的新副本。
答案 2:不,您不需要删除一些不是用 new 创建的薄。
您没有dynamically allocate
它,不需要手动delete
它。所以不,这里不会有泄漏。
虽然,正如你自己所说,你在这里制作了很多副本,这在性能方面显然是一个坏主意。
如果您希望返回对象的只读副本,则可以执行以下操作:
const OBJTIME&
ObjectParent::returnObjTime() const
{
return objTime;
}
那么对象权重是 100 字节还是 100MB 都没关系。
答案如下:
1 - 你通过值方法返回值,返回objTime;并将其放入局部变量中,因此每次它都将是一个新的本地副本"t"。
2 - 您不必担心删除变量"t">,因为您没有通过 new 运算符为 "t"> 分配内存,一旦超出函数范围(局部变量范围在功能块内(,它将自动删除。
仅当您要执行以下操作时才需要删除:
OBJTIME *t = new OBJTIME
相关文章:
- 如何在cpp中删除(免费)多维结构内存?
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 将此私有删除器函数包装在结构中的目的是什么?
- 从输入中删除重复项,而不使用任何数据结构
- 删除在结构 c++ 中声明的数组元素
- 删除父/子窗口层次结构的最佳方法
- 是否需要删除函数中未使用的新结构?
- 使用 C++ shared_ptr 用删除器包装 C 结构
- 删除包含结构的向量的向量
- 从向量中删除结构,解构它
- 如何查找/删除具有特定参数的结构向量的元素
- C 排序间隔结构以及删除重叠的间隔
- shared_ptr删除结构内的对象
- 如何创建一个结构的实例,当它不在范围内时,该实例将不会被删除
- 如何从 STL 列表中删除结构记录
- C++:从动态结构数组中删除元素并移动其他元素
- 在C 中删除指向结构的指针
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 是否有具有对数时间插入、删除和查找(带距离)的排序数据结构
- 二进制结构删除错误