3
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;
}

我的问题是:

  1. 如果另一个类调用 returnObjTime() 函数,比如:

    OBJTIME t = objectP->returnObjTime()
    我假设将创建 OBJTIME 结构的新副本?

  2. 完成后是否需要删除变量“t”?它会造成内存泄漏吗?

谢谢。

4

5 回答 5

6

不,您正在返回 globalobjTime的副本,副本和 global 都具有基于其范围的持续时间,这意味着当它们的范围结束时,它们将自动从内存中释放。

于 2013-01-02T15:54:01.083 回答
5

这是一个副本,是的,但它不是由 创建的new,所以你不需要delete它。

于 2013-01-02T15:55:27.897 回答
4

答案 1:是的,将根据调用函数的范围创建一个具有生命周期的新副本。

答案 2:不,你不需要删除你没有用 new 创建的东西。

于 2013-01-02T15:56:47.663 回答
3

你没有dynamically allocate它,你不需要手动delete它。所以不,这里不会有泄漏。

虽然,正如您自己所说,您在这里制作了很多副本,但这显然是一个坏主意。

如果您希望返回对象的只读副本,您可以这样做:

const OBJTIME&
ObjectParent::returnObjTime() const
{
    return objTime;
}

那么你的对象的重量是 100 字节还是 100 兆字节并不重要。

于 2013-01-02T15:56:41.657 回答
2

这里是答案:

1 - 您正在通过按值返回值方法返回值,返回 objTime;并将其放入一个局部变量中,因此每次都会是一个新的本地副本“t”。

2 - 您不必担心删除变量“t”,因为您没有通过new 运算符为“t”分配内存,一旦您超出函数范围,它将自动删除(局部变量范围在函数块内)。

仅当您将执行以下操作时才需要删除:

OBJTIME *t = new OBJTIME
于 2013-01-02T16:17:39.870 回答