我的类 MIDITest
有一个名为 IPianoRoll
的成员变量对象:
class MIDITest : public IPlug
{
private:
IPianoRoll mPianoRoll;
public:
MIDITest(IPlugInstanceInfo instanceInfo);
~MIDITest();
};
我需要调用 mPianoRoll
的自定义 CTOR:
IPianoRoll(IPlugBase *pPlug, int x, int y, int paramIdx) : IControl(pPlug, IRECT(x, y, x + kWidth, y + kHeight), paramIdx, IChannelBlend::kBlendColorDodge) {
}
仅在 MIDITest
中的某些其他任务之后,例如:
MIDITest::MIDITest(IPlugInstanceInfo instanceInfo) : IPLUG_CTOR(kNumParams, kNumPresets, instanceInfo) {
// SOME TASKS
IGraphics *pGraphics = MakeGraphics(this, GUI_WIDTH, GUI_HEIGHT, PLUG_FPS);
pGraphics->HandleMouseOver(true);
AttachGraphics(pGraphics);
// NOW I NEED TO "create it"
mPianoRoll(this, 8, 8, kParamIDPianoRoll);
}
但是我当然不能做 mPianoRoll(this, 8, 8, kParamIDPianoRoll);
。
我想避免为此使用指针,因为在“删除”时我遇到了奇怪的错误,并且因为(因为我不需要指针),我想最好不要使用它们和动态内存分配。
我不能使用 Member Init List,因为它将在 MIDITest
CTOR 中的 Task 之前被调用/使用。
路在何方?
最佳答案
如果 mPianoRoll
的构造取决于您在构造函数中执行的某些“任务”,那么您可以简单地使用赋值运算符并执行例如
mPianoRoll = IPianoRoll(this, 8, 8, kParamIDPianoRoll);
另一种可能的解决方案是使“任务”成为独立的类,并在 MIDITest
类中拥有它们的实例,或者让 MIDITest
从它们继承(如 mixins ) , 并为所有初始化和任务使用构造初始化列表,以列表中的 mPianoRoll
构造结束。
关于c++ - 如何在完成其他一些任务后在 CTOR 中初始化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310957/