gpt4 book ai didi

C++:破坏静态内容的最佳方式

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:07 25 4
gpt4 key购买 nike

当我有一个包含静态内容的类时,如何以最佳方式在应用程序结束时释放内存?

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

关于C++:破坏静态内容的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com