在调用类的方法时更改指向该类的指针会引起问题吗?

问题描述

首先,我想说这不是Is it safe to change a function pointer (std::function) inside a called function?的重复(或者至少我不相信),因为我没有使用 std ::职能。也不仅仅是被更改的函数指针;我使用“普通”指针来引用包含多个方法的对象,其中一个方法调用包含该指针的对象以对其进行更改。

这在过去一直有效,但是我不确定是否应该这样做。

代码如下:

class entry {
public:
  void handleEvent(byte button_id,byte flags);
  void virtual left(byte type) {}
  void virtual right(byte type) {}
  void virtual center(byte type) {}
  void virtual draw() {}
  void virtual idle() {}
  void virtual load() {}
};
class menu_class {
  entry *object;
public:
  void registerEntry(entry *obj);//sets 'object' from passed argument
  void update();//draws menu and reads buttons to call associated functions in the 'entry' object
};

要使用此功能,我定义了一个子类来继承entry,然后在其中定义函数(因为每个菜单的行为不同)。然后,我将其指针传递到menu_class对象中父对象类型(此处显示的类型)的指针,并在事件发生时(通过轮询和对{的重复调用来完成) {1}}。

要打开其他菜单,update中的方法之一将调用菜单控制器的entry方法。这样会将指向调用registerEntry对象的指针替换为指向新菜单项对象的指针。

这会导致程序开始执行任意代码或错过返回参数(尽管目前我在这里没有)吗?

我还有一些相关的问题,我不确定这些问题是否属于同一问题。我应该将以下内容移至一个新问题:

如果我要创建一个指针数组(或一个包含指针的小对象数组),更改用作该数组索引的变量(在调用对象的指针方法时)很好吗?

如果要动态分配正在调用其方法的对象,当我切换到新菜单时,如果将其作为entry的一部分进行分配,会发生什么情况? (让我们假设我没有进一步引用该对象的内部变量,但是即使如此,我仍然可以想象它现在正在使用不再存在的内存。)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...