(我不确定这个标题是否措辞正确,因为我还是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
这些方法。合理?有没有更简单的方法来实现这一目标?
答案 0 :(得分:1)
你确实需要一个指针。尝试使用:
LayoutObj *theLayout;
如果没有指针,则尝试将LayoutObj
分配给内存地址。这可能会编译,但不是您想要的行为。相反,您需要一个指针指向LayoutObj
的内存地址。
第myGroup.theLayout = &myLayout;
行保持不变。
与C ++一样,请注意myLayout
在theLayout
之前不会超出范围。如果发生这种情况,你会有一个悬空指针。如果存在任何风险,请考虑使用某种智能指针,或以其他方式修改您的设计以适应这种情况。
答案 1 :(得分:0)
是的,您需要使用指针:LayoutObj *theLayout
;
关于你的最后一段,我会考虑一些替代设计,例如:
LayoutObj
传递到SuperGroup
的每个方法中,从而将所执行的特定LayoutObj
与可执行的操作分离,或SomeClass
,如果其他地方不需要,或LayoutObj
本身的方法。