C:破坏静态东西的最佳方法
发布时间:2020-12-16 05:05:02 所属栏目:百科 来源:网络整理
导读:当我有一个包含静态内容的类时,如何在应用程序结束时以最佳方式释放内存? foo.h中 class GLUtesselator;class Foo{private: static GLUtesselator *tess;public: Foo(); virtual ~Foo();} Foo.cpp中 #include "Foo.h"#include GL/glu.hGLUtesselator *Foo::
当我有一个包含静态内容的类时,如何在应用程序结束时以最佳方式释放内存?
foo.h中 class GLUtesselator; class Foo { private: static GLUtesselator *tess; public: Foo(); virtual ~Foo(); } Foo.cpp中 #include "Foo.h" #include <GL/glu.h> GLUtesselator *Foo::tess = gluNewTess(); // System call Foo::Foo() {} Foo::~Foo() { // And of course I don't want to destruct it here,// because I'm going to use the tesselator in other instances of Foo // Otherwise: // gluDeleteTess(tess); } 是否有更好的替代方法来制作一个方法来删除静态的东西,并在应用程序终止时调用它? 谢谢 解决方法
简单.不要使静态成员成为指针.
然后它将被正确构造和破坏. 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |