首页 > 解决方案 > C++ 不允许我创建私有构造函数(或者我如何模拟这种用法)

问题描述

我需要创建一个私有构造函数,这样任何继承类的东西都不会再次调用构造函数。例如:


class Main
{
    private:
        Main()
        {
            std::cout << "Main Constructor called\n";
            SDL_Init(SDL_INIT_VIDEO);
            window = SDL_CreateWindow("Program", 0, 30, 1280, 720, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE );
            renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

            running = true;
        }


        ~Main()
        {
            std::cout << "Main Destructor called\n";
            SDL_DestroyRenderer(renderer);
            SDL_DestroyWindow(window);

            SDL_Quit();
        }

    public:
        SDL_Window* window;
        SDL_Renderer* renderer;
        SDL_Event event;
        bool running;

};

现在继承类的任何东西Main(至少我认为)都不会调用构造函数?如果不是这种情况,我怎样才能获得相同的用法,以便我的Main构造函数只调用一次。(错误是error: 'Main::Main()' is private

标签: c++inheritancesdl-2

解决方案


您的其他类不应继承自Main. 他们可能会引用它(作为成员或函数调用的参数)。

Main构造函数可能是公开的:

class Main
{
public:
    Main()
    {
        assert(running == false);
        std::cout << "Main Constructor called\n";
        SDL_Init(SDL_INIT_VIDEO);
        window = SDL_CreateWindow("Program", 0, 30, 1280, 720, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE );
        renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

        running = true;
    }

    Main(const Main&) = delete;
    Main(Main&&) = delete;
    Main& operator=(const Main&) = delete;
    Main& operator=(Main&&) = delete;

    ~Main()
    {
        std::cout << "Main Destructor called\n";
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);

        SDL_Quit();
        running = false;
    }

public:
    SDL_Window* window = nullptr;
    SDL_Renderer* renderer = nullptr;
    SDL_Event event;
    static bool running;
};
static bool Main::running = false;

struct Rectangle
{
    Point bottomLeft;
    Point topRight;
};

void Draw(Main&, const Rectangle&);

推荐阅读