我有两节课。在主类中,我有一个循序渐进的过程,可以逐步实现,我已将其实现为状态机。为了帮助保持机器的简单/友好,我创建了另一个类,它保存有关机器当前状态的信息。在主要类我然后添加了对它的引用
CAnimateMachine *m_AniMach;
在发生某些操作后,我调用主类中的一个函数来实例化我的状态机对象中的变量。每次调用此函数AniInit()
基本上应该"重置"状态机通过将变量实例化为"初始状态"。
我的问题是我不确定如何正确地实例化m_AniMach
。我习惯了C#,我可以做到
m_AniMach = new CAnimateMachine();
to" erase"旧对象并实例化一个新对象。虽然,从what I have read开始,我不可能在C ++中如此傲慢。什么是"重新实例化的正确方法?我的init方法中的这个变量?
我可以使用新的运算符m_AniMach = new CAnimateMachine()
然后在主类' deconstrutor做delete &m_AniMach
?
编辑: juanchopanza的回答对我有意义。虽然我在尝试编译时遇到错误。我不确定这个错误试图告诉我什么,我认为它告诉我,我的班级不是公开的?我查看了C2248 MSDN文章,但我看不出它与我的情况有什么关系。
error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
include\afx.h(562) : see declaration of 'CObject::operator ='
include\afx.h(532) : see declaration of 'CObject'
occurred in the compiler generated function 'CAnimateMachine &CAnimateMachine::operator =(const CAnimateMachine &)'
这是我的CAnimateMachine
班级
class CAnimateMachine
{
public:
CAnimateMachine();
int startX,startY;
};
这就是我实例化它的方式
m_AniMach = CAnimateMachine();
如何定义
CAnimateMachine m_AniMach;
答案 0 :(得分:4)
似乎没有理由使用指针。您可以改为使用对象:
CAnimateMachine m_AniMach;
在这种情况下,当保存它的类型的对象被实例化时,它将被初始化。要“重新初始化”它,你可以说
m_AniMach = CAnimateMachine();
如果您这样做,您将不必担心following the rule of three或其他动态分配陷阱等问题。