mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-18 04:23:20 +01:00
Close #13000: Refactor ObjectFactory to use unique_ptr
Employs the smart pointer unique_ptr for safer memory management. Classes involved: - ObjectRepository - ObjectManager
This commit is contained in:
@@ -94,7 +94,7 @@ public:
|
||||
public:
|
||||
std::tuple<bool, ObjectRepositoryItem> Create([[maybe_unused]] int32_t language, const std::string& path) const override
|
||||
{
|
||||
Object* object = nullptr;
|
||||
std::unique_ptr<Object> object;
|
||||
auto extension = Path::GetExtension(path);
|
||||
if (String::Equals(extension, ".json", true))
|
||||
{
|
||||
@@ -117,7 +117,6 @@ public:
|
||||
item.Authors = object->GetAuthors();
|
||||
item.Sources = object->GetSourceGames();
|
||||
object->SetRepositoryItem(&item);
|
||||
delete object;
|
||||
return std::make_tuple(true, item);
|
||||
}
|
||||
return std::make_tuple(false, ObjectRepositoryItem());
|
||||
@@ -290,7 +289,7 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Object* LoadObject(const ObjectRepositoryItem* ori) override
|
||||
std::unique_ptr<Object> LoadObject(const ObjectRepositoryItem* ori) override
|
||||
{
|
||||
Guard::ArgumentNotNull(ori, GUARD_LINE);
|
||||
|
||||
@@ -332,7 +331,7 @@ public:
|
||||
object_entry_get_name_fixed(objectName, sizeof(objectName), objectEntry);
|
||||
|
||||
// Check that the object is loadable before writing it
|
||||
Object* object = ObjectFactory::CreateObjectFromLegacyData(*this, objectEntry, data, dataSize);
|
||||
auto object = ObjectFactory::CreateObjectFromLegacyData(*this, objectEntry, data, dataSize);
|
||||
if (object == nullptr)
|
||||
{
|
||||
Console::Error::WriteLine("[%s] Unable to export object.", objectName);
|
||||
@@ -694,9 +693,9 @@ const rct_object_entry* object_list_find(rct_object_entry* entry)
|
||||
return result;
|
||||
}
|
||||
|
||||
void* object_repository_load_object(const rct_object_entry* objectEntry)
|
||||
std::unique_ptr<Object> object_repository_load_object(const rct_object_entry* objectEntry)
|
||||
{
|
||||
Object* object = nullptr;
|
||||
std::unique_ptr<Object> object;
|
||||
auto& objRepository = GetContext()->GetObjectRepository();
|
||||
const ObjectRepositoryItem* ori = objRepository.FindObject(objectEntry);
|
||||
if (ori != nullptr)
|
||||
@@ -707,7 +706,7 @@ void* object_repository_load_object(const rct_object_entry* objectEntry)
|
||||
object->Load();
|
||||
}
|
||||
}
|
||||
return static_cast<void*>(object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void scenario_translate(scenario_index_entry* scenarioEntry)
|
||||
@@ -750,22 +749,6 @@ const ObjectRepositoryItem* object_repository_find_object_by_name(const char* na
|
||||
return objectRepository.FindObject(name);
|
||||
}
|
||||
|
||||
void object_delete(void* object)
|
||||
{
|
||||
if (object != nullptr)
|
||||
{
|
||||
Object* baseObject = static_cast<Object*>(object);
|
||||
baseObject->Unload();
|
||||
delete baseObject;
|
||||
}
|
||||
}
|
||||
|
||||
void object_draw_preview(const void* object, rct_drawpixelinfo* dpi, int32_t width, int32_t height)
|
||||
{
|
||||
const Object* baseObject = static_cast<const Object*>(object);
|
||||
baseObject->DrawPreview(dpi, width, height);
|
||||
}
|
||||
|
||||
bool object_entry_compare(const rct_object_entry* a, const rct_object_entry* b)
|
||||
{
|
||||
// If an official object don't bother checking checksum
|
||||
|
||||
Reference in New Issue
Block a user