我试图让我的程序在调用对象的析构函数时结束。它的部分工作方式是因为对象被删除但程序仍在运行。有没有办法做到这一点?或者这是一种错误的方式,以更好的方式做到这一点?谢谢你的帮助!非常感谢!
这是主要功能
#include "engine.h"
int main(int argc, char* argv[]) {
bool running = true;
Engine engine;
engine.init();
while(running == true) {
engine.update();
engine.render();
}
return 0;
}
这是对象.cpp
#include "engine.h"
Engine::Engine() {
}
void Engine::init() {
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_CreateWindow("Engine", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 960, 540, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED);
if(screen == NULL) {
std::cout << "Could not create window: " << SDL_GetError() << std::endl;
}
}
void Engine::update(){
SDL_PollEvent(&event);
if(event.type == SDL_QUIT) {
delete this;
}
}
void Engine::render() {
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
Engine::~Engine() {
SDL_Quit();
}
答案 0 :(得分:2)
使用异常可能是退出深层嵌套代码的最优雅方式,因为它可以确保堆栈被展开并且所有内容都被正确销毁。我将仅为此异常定义一个空类型,可能嵌套在Engine
:
class Engine {
public:
// ...
struct ExitException {};
// ...
};
并将其从Engine::update
扔到退出:
void Engine::update(){
SDL_PollEvent(&event);
if(event.type == SDL_QUIT) {
throw ExitException();
}
}
你可以在main
中抓住它来干净地退出:
int main() {
Engine engine;
engine.init();
try {
while(true) {
engine.update();
engine.render();
}
} catch(Engine::ExitException&) {}
}
答案 1 :(得分:0)
如果要在调用Engine
析构函数时结束程序,可以使用exit();
快速浏览this以获取更多信息。