实例化变量的新实例

时间:2014-08-12 16:13:42

标签: c++ mfc

我有两节课。在主类中,我有一个循序渐进的过程,可以逐步实现,我已将其实现为状态机。为了帮助保持机器的简单/友好,我创建了另一个类,它保存有关机器当前状态的信息。在主要类我然后添加了对它的引用

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;

1 个答案:

答案 0 :(得分:4)

似乎没有理由使用指针。您可以改为使用对象:

CAnimateMachine m_AniMach;

在这种情况下,当保存它的类型的对象被实例化时,它将被初始化。要“重新初始化”它,你可以说

m_AniMach = CAnimateMachine();

如果您这样做,您将不必担心following the rule of three或其他动态分配陷阱等问题。