请解释实例创建时的内存分配
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创建实例。我们再次为同一个对象创建另一个实例。
在这种情况下,第一个创建的实例内存将被删除?
否则如何避免内存问题??
答案 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的问题,不要忘记';'课后定义。是的,您必须通过删除调用显式删除对象。为避免这种情况,您可以使用智能指针。