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”?它会造成内存泄漏吗?
感谢。
答案 0 :(得分:6)
不,你要返回全局objTime
的副本,副本和全局都有基于其范围的持续时间,这意味着当它们的范围结束时它们将自动从内存中释放。
答案 1 :(得分:5)
这是副本是,但它不是由new
创建的,所以您不需要delete
它。
答案 2 :(得分:4)
答案1:是的,将根据调用该函数的范围创建一个具有生命周期的新副本。
答案2:不,你不需要删除你没有使用new创建的东西。
答案 3 :(得分:3)
你没有dynamically allocate
它,你不需要手动delete
它。所以不,这里不会有泄漏。
虽然,正如你自己所说,你在这里制作了大量的副本,但这显然是一个糟糕的表现。
如果您希望返回对象的只读副本,则可以执行以下操作:
const OBJTIME&
ObjectParent::returnObjTime() const
{
return objTime;
}
然后,对象的权重为100bytes或100Mbytes并不重要。
答案 4 :(得分:2)
答案如下:
1 - 您通过按值返回,返回objTime; 并将其转换为局部变量返回值,因此每次它都是新的本地副本“T”。
2 - 您无需担心删除变量“t”,因为您没有通过新运营商为“t”分配内存,一旦您将自动删除它将超出函数的范围(局部变量范围在功能块中)。
删除仅在您执行以下操作时才需要:
OBJTIME *t = new OBJTIME