【问题标题】:Assign object of a different child class to the pointed address [C++]将不同子类的对象分配给指向的地址 [C++]
【发布时间】:2021-01-07 10:54:15
【问题描述】:

我正在从事一个项目,其中有几个子类(Profile1、Profile2、Profile3)。其中一项功能是编辑配置文件,其中包括将类型从 Profile1 更改为 Profile2。我的第一个想法是简单地删除以前的对象并创建新对象,但这需要对代码进行一些额外的更改,因此我决定尝试找到一种方法,可以保留指向该对象的指针但更改值。

这是我的代码的极其简化的示例:

Parent * currentProfile= new Child1();
Child2* newProfile = new Child2();
*currentProfile = *newProfile;

当我创建与当前对象相同类型的新对象时,它可以完美运行,但是当我尝试分配不同类型的对象时,它会将其转换为当前类型(在上面的示例代码中 currentProfile 对象的值is 指向将更改为 newProfile 的值,但类将保持为 Child1 而不是 Child2)。

有没有一种简单的方法来保持地址但改变子对象的类型?如果没有,除了删除以前的对象并创建新对象之外,还有更好的方法吗?

谢谢

【问题讨论】:

  • 您不能更改对象类型但保持相同的地址。不同的对象类型需要不同的内存量。
  • 是的,我明白了,谢谢。认为它可以以某种方式工作,因为它是同一个父类,并且我在创建指针时总是使用父类

标签: c++ object pointers


【解决方案1】:

正如我在 cmets 中所说,您不能更改对象类型,但要保持相同的地址。不同的对象类型需要不同的内存量

如果Child1Child2 派生自同一个父级,那么您可以保留相同的指针,但它会保存不同的地址。

Parent * currentProfile= new Child1();
Child2* newProfile = new Child2();
currentProfile = newProfile;

currentProfile 现在指向Child2 的地址。

【讨论】:

  • 请注意,上面的示例会泄漏 Child1 内存,除非您先将其删除或使用智能指针。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2021-01-05
  • 2014-08-11
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多