Это мой код:Как избежать утечки памяти?
void MIDITest::CreateNoteBlock() {
IMidiMsgExt* midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(57, 100, 0, 0, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(60, 100, 0, tickSize * 38, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(62, 100, 0, 0, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(65, 100, 0, tickSize * 32, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(57, 0, tickSize * 111, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(60, 0, tickSize * 111, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(62, 0, tickSize * 75, 0);
queuedNotes.insert(*midiMessage);
midiMessage = new IMidiMsgExt;
midiMessage->MakemidiMessageMsg(65, 0, tickSize * 105, 0);
queuedNotes.insert(*midiMessage);
}
так у каждого new
оператора будет выделять блок памяти.
Должен ли я использовать free
после любых insert
внутри queuedNotes? Или он будет выпущен после возврата void
? (т. е. скобки CreateNoteBlock).
Или я могу «повторно использовать» каждый раз, когда указатель midiMessage
для нового IMidiMsgExt
?
Покажите нам полный код. Что такое 'queuedNotes'? – Chiel
@Chiel это 'multiset queuedNotes;'. Это код: он вызывается внутри CTOR класса. –
markzzz
Как насчет использования 'IMidiMsgExt midiMessage;' вместо 'IMidiMsgExt * midiMessage = новый IMidiMsgExt'? –