【发布时间】:2015-05-02 03:56:37
【问题描述】:
在C++ 中,我有一个按值返回一流对象的函数,如下所示:
Image Video::getFrame(int frame) {
Image img(...);
... processing ...
return img;
}
在返回值并且img 超出范围后,将调用Image 析构函数,销毁对象内的所有数据。因此,每当我这样做时:
Image frame = video.getFrame(10);
frame 看起来好像完全未初始化。
我认为按值返回应该是一个完整的、单独的 img 副本。不知何故,我误解了发生了什么。我该如何克服这个问题?
注意:Image 中的成员变量都不是指针。
【问题讨论】:
-
您如何确定
frame未初始化? -
@0x499602D2 我说“看起来好像完全未初始化”。这是因为在函数
getFrame()返回后调用了Image::~Image()。 -
在我看来 Image 是你自己的类,你需要指定复制构造函数。如果你用谷歌搜索“复制构造函数”,你会发现原因。
-
@Oliver:这怎么可能?如果您按值返回对象,则会发生这种情况(假设没有移动构造函数在起作用):1)调用复制构造函数->您将创建第二个对象。 2)第一个对象被销毁(这就是调用析构函数的原因)。但也许我不明白你的问题。尝试添加您的复制构造函数代码以及未初始化的内容。
-
2Oliver:在那种情况下,我无法再帮你了。您发布的代码对我来说似乎很好。所以可能还有其他错误。尝试添加更多代码...
标签: c++ function object return destructor