我可以在父构造函数中多次重用函数的返回值吗?

时间:2017-06-20 07:09:30

标签: c++ function caching constructor return-value

与这个问题类似,但是我觉得它不是一个重复的不同之处:
C++ Calling a function before base-class initialization in the initialization list

我有这个构造函数:

EditorGrid::EditorGrid(int width, int height) :
    Grid(width  ,   //workingWidth
         height ,   //workingHeight
         (SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace                                         )  ,   //pitchWidth
         (SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace + SettingsApp::getInstance(0)->iconLabel)      //pitchHeight
         )
{
    //EditorGrid-specific setup
}

它有效,但是当我知道它每次都会返回相同的东西时,我会多次调用SettingsApp::getInstance(0)看起来很难看。我可以调用一次,只是在这种情况下重用该值吗? (在这种情况下,指向SettingsApp对象的指针)

(之所以这样结构是因为Grid的不同孩子对pitchWidthpitchHeight有不同的等式,我想保持隐含地使用相同对象的单身人士的想法到处都没有实际传递它。)

1 个答案:

答案 0 :(得分:6)

创建一个(可能是私有的)ctor,将你想要计算的值作为参数一次并委托给它:

EditorGrid::EditorGrid(int width, int height, /*your_type*/& instance_0) :
    Grid(width, height,
         instance_0.iconSize + instance_0.iconSpace,
         instance_0.iconSize + instance_0.iconSpace + instance_0.iconLabel
{
    //EditorGrid-specific setup
}

EditorGrid::EditorGrid(int width, int height) :
    EditorGrid(width, height, *SettingsApp::getInstance(0))
{
}