在C ++中使用实例创建的内存分配

时间:2012-05-02 10:52:46

标签: c++ oop memory-management

请解释实例创建时的内存分配

class simpleTestFactory
{
    public: 
    static simpleTest* Create()
    {
        return new simpleTest();
    }
}

class simpleTest
{
    private:
    int x,y,z;
    public:
    int printTest()
    {
        cout<<"\n This test program";
    }
}

int main()
{

    simpleTest* s1=simpleTestFactory::Create();
    .
    .   
    s1=simpleTestFactory::Create();
}   

在main函数中,我们使用create static function为simpleTest创建实例。我们再次为同一个对象创建另一个实例。

在这种情况下,第一个创建的实例内存将被删除?

否则如何避免内存问题??

4 个答案:

答案 0 :(得分:2)

  

在这种情况下,第一个创建的实例内存将被删除吗?

不,它不会。您必须通过调用delete或首先使用智能指针来自行解除分配。

(我假设s1的类型为simpleTest*,即{em>指针为simpleTest,否则您的代码无效C ++。)

答案 1 :(得分:2)

首先,当您将指针传递给对象时,您的程序将无法编译。它应该是:

simpleTest *s1 = simpleTestFactory::Create();
           ^^^

内存管理必须在C ++中手动完成。

delete s1;  // do it before new allocation to s1.

还要记住,在C ++中创建一个new的对象不是强制性的。它可以很简单:

simpleTest obj;  // automatic object, no explicit deallocation

[对于自动垃圾收集,您也可以使用smart pointers]。

答案 2 :(得分:2)

尝试单例类型模式。只有在尚未创建实例时才能创建实例。不确定你的用例。

答案 3 :(得分:0)

Singleton模式还假设将删除对象实例。因此,您需要实现特殊方法。

考虑到Thangaraj的问题,不要忘记';'课后定义。是的,您必须通过删除调用显式删除对象。为避免这种情况,您可以使用智能指针。

相关问题