C++ 在类中运行析构函数时退出程序

C++ 在类中运行析构函数时退出程序,c++,sdl,C++,Sdl,我试图在调用对象的析构函数时结束程序。它的部分工作方式,因为对象已删除,但程序仍在运行。有没有办法做到这一点?或者这是一个错误的方法,用更好的方法来做这件事?谢谢你的帮助!非常感谢 这里是主要功能 #include "engine.h" int main(int argc, char* argv[]) { bool running = true; Engine engine; engine.init(); while(running == true) {

我试图在调用对象的析构函数时结束程序。它的部分工作方式,因为对象已删除,但程序仍在运行。有没有办法做到这一点?或者这是一个错误的方法,用更好的方法来做这件事?谢谢你的帮助!非常感谢

这里是主要功能

#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();
}
#包括“engine.h”
引擎::引擎(){
}
void引擎::init(){
SDL_Init(SDL_Init_视频);
屏幕=SDL_CreateWindow(“引擎”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,960,540,显示SDL_WINDOW_);
渲染器=SDL\u CreateRenderer(屏幕,-1,SDL\u渲染器\u加速);
如果(屏幕==NULL){

std::cout如果要在调用
引擎
析构函数时结束程序,可以使用
exit();


请快速查看以获取更多信息。

使用异常可能是从深度嵌套代码中退出的最优雅的方式,因为它可以确保堆栈被展开,所有内容都被正确销毁。我将定义一个空类型,仅为该异常抛出,可能嵌套在
引擎中

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&) {}
}

我对SDL一无所知,但它是否正在创建一些不会停止的线程?@kmort right我正在尝试查看当对象被销毁时是否有办法结束程序,因为没有游戏对象,你就没有游戏了Lol你是说当调用
引擎
析构函数时,你想退出程序吗?如果是,你可以只需使用
exit()
@kmort这正是我在阅读您的评论之前所做的。如果您想将其作为答案,我将接受:)
删除此
指向未分配
的对象时有未定义的行为,就像您的程序一样。因为这似乎是在执行窗口管理ent,调用
exit()
可能是个坏主意。可能需要运行本地析构函数,并调用旧的C库清理函数。