Simple Do not make a static element a pointer.
Then it will be properly built and destroyed.
foo.h
#include <GL/glu.h>
class Foo
{
private:
static GLUtesselator tess;
public:
Foo();
virtual ~Foo();
};
foo.cpp
GLUtesselator Foo::tess;
gluNewTess() gluDeleteTess(), . , . shared_ptr .
foo.h
#include <GL/glu.h>
typedef std::shared_ptr<GLUtesselator,void (*)(GLUtesselator*)> AutoGluTess;
class Foo
{
private:
static AutoGluTess tess;
public:
Foo();
virtual ~Foo();
};
foo.cpp
AutoGluTess Foo::tess(gluNewTess(), &gluDeleteTess);