在C++
中,我有一个按值返回第一类对象的函数,如下所示:
Image Video::getFrame(int frame) {
Image img(...);
... processing ...
return img;
}
返回值并且img
超出范围后,将调用Image
析构函数,销毁对象内的所有数据。因此,每当我这样做时:
Image frame = video.getFrame(10);
frame
似乎完全没有初始化。
我认为按值返回应该是img
的完整,单独的副本。不知何故,我误解了发生的事情。我怎样才能克服这个问题?
注意: Image
中的所有成员变量都不是指针。
答案 0 :(得分:0)
我刚刚发现了原因。一个小小的差异,结果证明是一个大问题。 frame
的类型为Image*
,而非Image
。因此,它指向函数内部的img
变量,而不是复制其数据。当调用析构函数时,该变量指向的数据被销毁。
我知道这没有意义......