所以我有一个具有以下功能的类:
void AddNoiseToAim(Vector2D& position) const
本质上是一种效用函数。
为了正确计算噪声,我使用了一个复杂的对象,它需要大量的初始化,所以为了避免在每次调用函数时都这样做,我决定把对象作为类的非const属性,所以初始化是在实例化时执行一次,然后由函数多次使用。
问题是AddNoiseToAim
是const而且属性不是这样我不能在函数中使用它,但该属性仅用于此特定目的,因此唯一能阻止我放置它的东西在函数范围内是对象的初始化。
我现在想到了3个解决方案,第一个是删除AddNoiseToAim的const修饰符,但我不想这样做,因为本质上这个函数不会修改类的实例。第二个解决方案是将属性作为对函数的引用传递,就像它为参数位置所做的那样,但即使这样也有点奇怪,因为它就像绕道而行。最后我现在已经解决的问题但是会给我带来内存问题的解决办法就是这样做:
void Raven_WeaponSystem::AddNoiseToAim(Vector2D& AimingPos) const
{
static FuzzyModule* fuzzyModule = InitializeFuzzyModule();
/* omitted */
}
FuzzyModule不再是该类的属性。
在我的情况下,Raven_WeaponSystem与应用程序具有相同的生命周期,所以我并不关心丢失的内存,但它确实感觉不太好。
总结一下!我希望函数在函数的第一次调用时只在其作用域中初始化一次对象,或者我希望对象在函数外部初始化并在常量函数中使用(在这种情况下,我的第二个解决方案就足够了)
感谢您的时间!欢呼声。
答案 0 :(得分:3)
如果您无法在构造函数中初始化fuzzyModule
,请在类中声明它mutable
(这将允许您在const
函数中修改其值。)
mutable FuzzyModule *fuzzyModule;