C ++将对象成员设置为不同对象成员的引用/指针?

时间:2010-07-28 02:47:40

标签: c++ pointers reference

(我不确定这个标题是否措辞正确,因为我还是C ++新手)

我有两个类,在这里松散地表示:

class SuperGroup
{
public:
    LayoutObj theLayout;
}

class SomeClass
{
public:
    LayoutObj myLayout;
    SuperGroup myGroup;
}

SomeClass的构造函数中,我想将myGroup.theLayout设置为指向SomeClass的{​​{1}}。像这样:

searchLayout

我这样做是否正确?或者我需要使用指针?我的代码似乎编译好了,但是当我执行它时,它会崩溃,我可以告诉它与这个任务有关。另外,我不确定它是否编码不正确,或者我使用的SDK / API是否不喜欢它。

我尝试使用SomeClass::SomeClass() { myGroup.theLayout = &myLayout; } 引用myLayout的原因是因为SuperGroup中的许多方法需要使用SuperGroup中的myLayout。我只是试图避免每次都通过引用传递SomeClass这些方法。合理?有没有更简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

你确实需要一个指针。尝试使用:

LayoutObj *theLayout;

如果没有指针,则尝试将LayoutObj分配给内存地址。这可能会编译,但不是您想要的行为。相反,您需要一个指针指向LayoutObj的内存地址。

myGroup.theLayout = &myLayout;行保持不变。

与C ++一样,请注意myLayouttheLayout之前不会超出范围。如果发生这种情况,你会有一个悬空指针。如果存在任何风险,请考虑使用某种智能指针,或以其他方式修改您的设计以适应这种情况。

答案 1 :(得分:0)

是的,您需要使用指针:LayoutObj *theLayout;

关于你的最后一段,我会考虑一些替代设计,例如:

  • 要求将LayoutObj传递到SuperGroup的每个方法中,从而将所执行的特定LayoutObj与可执行的操作分离,或
  • 将这些方法移至SomeClass,如果其他地方不需要,或
  • 制作LayoutObj本身的方法。