如何指定析构函数调用的顺序?

马修·洛克

我想使用SDL 2.0编写一个简单的游戏,它的结构看起来像这样:

  • 类Engine,它将在其构造函数中初始化SDL(SDL.Init()),在析构函数中调用SDL_Quit(),并包含Window和Texture的实例
  • class SDL_Texture *的纹理包装器类。创建时创建纹理,破坏析构函数中的纹理
  • class Window-SDL_Window的包装器类,在开始时创建SDL_Window *和SDL_Renderer *,并在析构函数中删除。

现在,据我所知,SDL_Quit()卸载dll,关闭所有子系统,等等。如果我正确理解,那么如果我调用SDL_Quit(),调用SDL_DestroyWindow(),SDL_DestroyRenderer()和SDL_DestroyTexture()可能没有任何影响或原因错误,因为系统已经卸载以及dll。

因此,在调用SDL_Quit()之前,我希望在引擎的析构函数开始时破坏引擎内的纹理和窗口。

当我尝试在一个简单的类示例上对其进行仿真时,我得到了简单的LIFO响应:

ClassOne对象已初始化

ClassTwo对象已初始化

聚合对象已初始化

聚合对象已销毁

ClassTwo对象被破坏

ClassOne对象销毁

这不是我想要的。我设法使用指针和动态内存分配来解决我的问题。我只是使用Aggregate构造函数中的new运算符创建它们,然后使用析构函数中的operator delete销毁它们。

但是,还有其他方法可以完成,而不涉及指针吗?提前致谢。

gx_

不涉及指针:

如果有(假设#include <iostream>

class Window {
public:
    Window() { std::cout << "W "; }
    ~Window() { std::cout << "~W "; }
};

class Texture {
public:
    Texture() { std::cout << "T "; }
    ~Texture() { std::cout << "~T "; }
};

并且您想要一个对应于outputInit W T的订单~T ~W Quit,那么,而不是:

class Engine {
public:
    Engine() { std::cout << "Init "; }
    ~Engine() { std::cout << "Quit "; }
private:
    Window w;
    Texture t;
};

W T InitQuit ~T ~W),请执行以下操作:

class Initializer {
public:
    Initializer() { std::cout << "Init "; }
    ~Initializer() { std::cout << "Quit "; }
};

class Engine {
public:
    Engine() { /* nothing */ }
    ~Engine() { /* nothing */ }
private:
    Initializer i;
    Window w;
    Texture t;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

析构函数的顺序

来自分类Dev

析构函数的顺序

来自分类Dev

析构函数调用

来自分类Dev

离开范围时析构函数调用的顺序?(C ++)

来自分类Dev

在C ++中调用虚拟析构函数的顺序

来自分类Dev

未按预期的相反顺序调用类析构函数

来自分类Dev

析构函数执行顺序?

来自分类Dev

从析构函数调用BeginInvoke

来自分类Dev

如何从析构函数调用const成员函数

来自分类Dev

使用Vector创建对象时如何调用析构函数

来自分类Dev

您如何测试是否将调用Ruby析构函数?

来自分类Dev

如何跟踪析构函数在哪里被调用-C ++

来自分类Dev

如何在链表中对析构函数进行递归调用?

来自分类Dev

Singleton:析构函数如何被两次调用?

来自分类Dev

如何理解CPP中的调用析构函数方法?

来自分类Dev

如何显式调用 std 迭代器的析构函数?

来自分类Dev

关于析构函数调用,堆栈展开如何工作?

来自分类Dev

析构函数调用究竟是如何进行的

来自分类Dev

std:map析构函数会调用键析构函数还是值析构函数?

来自分类Dev

如何定义析构函数?

来自分类Dev

析构函数如何工作?

来自分类Dev

说明此C ++代码中的构造函数/析构函数调用的顺序

来自分类Dev

返回值寄存器和析构函数调用顺序

来自分类Dev

为什么不按相反的顺序对对象数组调用析构函数?

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

C ++:调用了错误的析构函数

来自分类Dev

避免析构函数调用特定异常

来自分类Dev

范围结束之前调用的析构函数

来自分类Dev

delete []是否调用析构函数?