我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
I have an object that will be instantiated the entire duration of the program, but a class member that will not, should I dynamically allocate it?
让我再冲出我的问题:
我有一个 Game 类,它在程序开始时实例化,仅在程序生命周期结束时销毁。
我的 Game 类中有一个"StartMenu"成员对象,我显然希望在游戏生命周期开始时可以使用该对象,但在用户启动游戏后不会占用内存。(根本没有理由这样做(。
我当前的解决方案是将 StartMenu 指针声明为成员,通过从构造函数调用的方法(或在必要时在其他地方(为其动态分配内存,然后在用户希望玩游戏时将其删除。 这是一个好的做法解决方案吗?是否应该更改设计,或者是否有或更多标准处理"开始菜单"的方式?
相关代码:
Class Game
{
private:
StartMenu* startMenu_ptr;
//Other Game Vars
}
初始 化
Game::initStartMenu() {
startMenu_ptr = new StartMenu();
}
删除
Game::runStartMenu() {
if(startMenu_ptr->getOption()==1) {
delete startMenu_ptr;
startMenu_ptr = nullptr;
}
编辑:需要更多详细信息。 runStartMenu 从每帧循环一次调用,以检测更新和用户输入。此外,对 startMenu 的任何更新都会被记录下来,然后在单独的方法(Game::render(((中绘制以反映用户输入。我不能在循环的每次迭代中重新初始化 startMenu。
游戏::update(( (从主事件调用,内部事件而循环(
void Game::update() {
switch(gameState)
{
case 0:
runStartMenu();
break;
case *n*... //other game screens...
}
}
然后我的绘制游戏::render(( 函数:(从主事件调用,内部事件而循环(
Game::render()
switch(gameState)
{
case 0:
drawStartMenu();
break;
case *n*... //other game screens...
}
}
谢谢。
编辑:根据要求,允许在菜单运行时后台执行其他任务
作为一般规则,切勿在智能指针的上下文之外操作原始new
和delete
运算符。对于您的用例,您绝对可以使用静态分配,动态分配不会带来任何优势,因此我建议您以直接的方式设计它,如下所示:
StartMenu::choice_t choice;
Game::runStartMenu() {
auto menuThread = std::thread([](){
auto menu = StartMenu{/* options */};
// for example :
choice = menu.show();
}); // the menu memory gets freed here
menuThread.join(); // wait for execution end
// choice handling logic
}
然后,调用方可以实现菜单选择逻辑并开始游戏!
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 我们可以访问一个不存在的联盟的成员吗
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何从另一个文件继承私有成员变量和公共函数
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 是否可以同时声明一个类成员的常量/非常量?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 没有公共构造函数作为另一个类模板成员的类模板
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 如何使用另一个类中的公共成员函数作为参数调用线程
- 访问超类类型成员对象的受保护成员 - 一个优雅的解决方案