【发布时间】:2016-11-24 15:33:32
【问题描述】:
我有一个函数:
void AddImage(const Image &im);
这个函数不需要图像是可修改的,但是它将图像存储为一个常量引用以供以后使用。因此,这个函数不应该允许临时的。在没有任何预防措施的情况下,以下工作:
Image GetImage();
...
AddImage(GetImage());
有没有办法阻止这个函数调用?
【问题讨论】:
-
除了眼前的问题还要考虑生命周期的问题。在您当前的设计中,调用者负责确保图像在被调用者可以使用的情况下一直存在。像这样的不对称所有权可能会导致严重的问题。如果没有更多上下文,我不能说您的代码是否属于这种情况。这绝对是需要小心谨慎的事情。
-
绝对正确。然而,这是对工作系统的过度简化。在工作系统中 AddImage 是动画对象的成员函数,图像和动画对象的生命周期是同步的(它们通常是同一类的成员)。为了确保销毁序列不会出现任何问题,动画在销毁过程中不会检查其子项。