加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读