我想使用SDL 2.0编写一个简单的游戏,它的结构看起来像这样:
现在,据我所知,SDL_Quit()卸载dll,关闭所有子系统,等等。如果我正确理解,那么如果我调用SDL_Quit(),调用SDL_DestroyWindow(),SDL_DestroyRenderer()和SDL_DestroyTexture()可能没有任何影响或原因错误,因为系统已经卸载以及dll。
因此,在调用SDL_Quit()之前,我希望在引擎的析构函数开始时破坏引擎内的纹理和窗口。
当我尝试在一个简单的类示例上对其进行仿真时,我得到了简单的LIFO响应:
ClassOne对象已初始化
ClassTwo对象已初始化
聚合对象已初始化
聚合对象已销毁
ClassTwo对象被破坏
ClassOne对象销毁
这不是我想要的。我设法使用指针和动态内存分配来解决我的问题。我只是使用Aggregate构造函数中的new运算符创建它们,然后使用析构函数中的operator delete销毁它们。
但是,还有其他方法可以完成,而不涉及指针吗?提前致谢。
不涉及指针:
如果有(假设#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 Init
和Quit ~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] 删除。
我来说两句