c++ - 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
解决方案
您的其他类不应继承自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&);
推荐阅读
- java - TcpOutboundGateway - 从服务器获得响应后收到警报消息关闭通知?
- javascript - 如何在javascript中做顺序承诺?
- android - 如何从刀柄获取 viewModelScope
- python - setup.py 中没有Required-By 的参数
- python - if 语句不适用于抓取的网络文本
- iis - 在 Win10 中使用本地 IIS 服务器进行问题测试
- python - RuntimeError:输入类型(torch.FloatTensor)和权重类型(torch.cuda.FloatTensor)应该相同 - PyTorch
- python - 自动进行 Excel 对帐
- wordpress - ACF - 创建帖子时初始化强制字段
- angular - Angular 中的二级导航