c++ - 如何在完成其他一些任务后在 CTOR 中初始化对象?

标签 c++ oop object initialization

我的类 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/

相关文章:

c++ - 带有整数参数的 std::pow,与整数类型进行比较

c++ - 使用来自 unique_ptr vector 的原始指针作为排序的 ID

Java jList1.getSelectedValue() 返回一个对象。我需要所选列表项中的字符串。

c++ - Qt 编译 - 在 Windows 上使用 qmake

c++ - 自动调用原始指针的自定义转换器 A* <-> B*

java - 在猜数字游戏中循环

perl - 正确的 Perl OO 继承

javascript - 在 TypeScript 中命名抽象类和接口(interface)

具有属性的 Javascript 数组?

php - PHP 中的域对象和模型是什么?