2

请用实例创建解释内存分配

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();
}   

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

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

否则如何避免内存问题?

4

4 回答 4

2

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

不,不会的。您必须自己通过调用delete或首先使用智能指针来释放它。

(我假设它s1是 type simpleTest*,即指向 的指针simpleTest否则您的代码不是有效的 C++。)

于 2012-05-02T10:54:57.897 回答
2

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

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

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

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

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

simpleTest obj;  // automatic object, no explicit deallocation

[对于自动垃圾收集,您还可以使用智能指针]。

于 2012-05-02T10:56:00.483 回答
2

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

于 2012-05-02T11:17:18.960 回答
0

单例模式还假设对象实例将被删除。因此,您需要实施特殊的方法。

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

于 2012-05-02T12:21:30.543 回答