mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-31 00:36:40 +00:00
A better way to plug a potential memory leak in the event of an exception during push_back().
This commit is contained in:
parent
fd67ebde25
commit
3e466699c8
1 changed files with 6 additions and 10 deletions
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <cassert>
|
||||
|
||||
#include <components/esm/loadacti.hpp>
|
||||
#include <components/esm/loadalch.hpp>
|
||||
|
@ -94,16 +95,11 @@ namespace CSMWorld
|
|||
template<typename RecordT>
|
||||
void RefIdDataContainer<RecordT>::insertRecord(std::unique_ptr<RecordBase> record)
|
||||
{
|
||||
// convert base pointer to record type pointer first
|
||||
if(Record<RecordT> *tmp = dynamic_cast<Record<RecordT>*>(record.get()))
|
||||
{
|
||||
std::unique_ptr<Record<RecordT> > newRecord;
|
||||
newRecord.reset(tmp);
|
||||
mContainer.push_back(std::move(newRecord));
|
||||
record.release();
|
||||
}
|
||||
else
|
||||
throw std::runtime_error ("invalid record for RefIdDataContainer");
|
||||
assert(record != nullptr);
|
||||
// convert base pointer to record type pointer
|
||||
std::unique_ptr<Record<RecordT>> typedRecord(&dynamic_cast<Record<RecordT>&>(*record));
|
||||
record.release();
|
||||
mContainer.push_back(std::move(typedRecord));
|
||||
}
|
||||
|
||||
template<typename RecordT>
|
||||
|
|
Loading…
Reference in a new issue