从函数调用析构函数返回的对象

时间:2015-03-01 20:53:53

标签: c++ function object return destructor

C++中,我有一个按值返回第一类对象的函数,如下所示:

Image Video::getFrame(int frame) {
    Image img(...);

    ... processing ...

    return img;
}

返回值并且img超出范围后,将调用Image析构函数,销毁对象内的所有数据。因此,每当我这样做时:

Image frame = video.getFrame(10);

frame似乎完全没有初始化。

我认为按值返回应该是img的完整,单独的副本。不知何故,我误解了发生的事情。我怎样才能克服这个问题?

注意: Image中的所有成员变量都不是指针。

1 个答案:

答案 0 :(得分:0)

我刚刚发现了原因。一个小小的差异,结果证明是一个大问题。 frame的类型为Image*,而非Image。因此,它指向函数内部的img变量,而不是复制其数据。当调用析构函数时,该变量指向的数据被销毁。

我知道这没有意义......