Skip to content

Commit bc3b2f0

Browse files
authored
Unregister render object constructors gracefully (#4993)
1 parent 93761f8 commit bc3b2f0

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

source/MRMesh/MRIRenderObject.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ class RenderObjectConstructorsHolder
2020
auto& inst = instance_();
2121
inst.map_[type] = lambda;
2222
}
23+
static void removeConstructorLambda( const std::type_index& type )
24+
{
25+
auto& inst = instance_();
26+
inst.map_.erase( type );
27+
}
2328
private:
2429
static RenderObjectConstructorsHolder& instance_()
2530
{
@@ -31,10 +36,16 @@ class RenderObjectConstructorsHolder
3136

3237

3338
RegisterRenderObjectConstructor::RegisterRenderObjectConstructor( const std::type_index& type, IRenderObjectConstructorLambda lambda )
39+
: type_( type )
3440
{
3541
RenderObjectConstructorsHolder::addConstructorLambda( type, lambda );
3642
}
3743

44+
RegisterRenderObjectConstructor::~RegisterRenderObjectConstructor()
45+
{
46+
RenderObjectConstructorsHolder::removeConstructorLambda( type_ );
47+
}
48+
3849
std::unique_ptr<IRenderObject> createRenderObject( const VisualObject& visObj, const std::type_index& type )
3950
{
4051
auto lambda = RenderObjectConstructorsHolder::findConstructorLambda( type );

source/MRMesh/MRIRenderObject.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ class RegisterRenderObjectConstructor
208208
{
209209
public:
210210
MRMESH_API RegisterRenderObjectConstructor( const std::type_index& type, IRenderObjectConstructorLambda lambda );
211+
MRMESH_API ~RegisterRenderObjectConstructor();
212+
213+
private:
214+
std::type_index type_;
211215
};
212216

213217
#define MR_REGISTER_RENDER_OBJECT_IMPL(objectType, .../*rendObjectType*/)\

0 commit comments

Comments
 (0)