From 5e10e61acafa02b1d94b32387b8f16776b68de9b Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 3 Oct 2025 14:18:07 +0200 Subject: [PATCH] Clean-up parsed simple types #7185 --- src/ifcparse/IfcParse.cpp | 1 + src/ifcparse/storage.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/ifcparse/IfcParse.cpp b/src/ifcparse/IfcParse.cpp index 4f06ce4660..183047b6fd 100644 --- a/src/ifcparse/IfcParse.cpp +++ b/src/ifcparse/IfcParse.cpp @@ -725,6 +725,7 @@ void IfcParse::impl::in_memory_file_storage::load(unsigned entity_instance_name, // the 2nd pass. load(entity_instance_name, entity, ps, attribute_index == -1 ? (int)attribute_index_within_data : attribute_index); auto* simple_type_instance = (schema ? schema : file->schema())->instantiate(decl, ps.construct(entity_instance_name, *references_to_resolve, decl, boost::none, attribute_index == -1 ? (int)attribute_index_within_data : attribute_index)); + read_simple_type_instances.push_back(simple_type_instance); //@todo decide addEntity(((IfcUtil::IfcBaseClass*)*entity)); context.push(simple_type_instance); simple_type_instance->file_ = file; diff --git a/src/ifcparse/storage.h b/src/ifcparse/storage.h index 46ea9ce2a1..d0ebf4320c 100644 --- a/src/ifcparse/storage.h +++ b/src/ifcparse/storage.h @@ -189,6 +189,8 @@ namespace IfcParse { namespace impl { struct IFC_PARSE_API in_memory_file_storage { + std::vector read_simple_type_instances; + IfcParse::IfcSpfLexer* tokens; // IfcParse::IfcSpfStream* stream; @@ -212,6 +214,11 @@ namespace IfcParse { typedef entity_instance_by_name_t::iterator iterator; in_memory_file_storage(IfcParse::IfcFile* f = nullptr) : tokens(nullptr), file(f), schema(nullptr) {} + ~in_memory_file_storage() { + for (auto* inst : read_simple_type_instances) { + delete inst; + } + } in_memory_file_storage(const in_memory_file_storage&) = delete; in_memory_file_storage(const in_memory_file_storage&&) = delete;