Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中创建实例时的内存分配+;_C++_Oop_Memory Management - Fatal编程技术网

C++ 在C+中创建实例时的内存分配+;

C++ 在C+中创建实例时的内存分配+;,c++,oop,memory-management,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 tes

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

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();
}   
类simpleTestFactory
{
公众:
静态simpleTest*创建()
{
返回新的simpleTest();
}
}
类simpleTest
{
私人:
int x,y,z;
公众:
int printest()
{
库特
在这种情况下,会删除第一个创建的实例内存吗

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


(我假定S1类型为 SimeTest**/Cuff>,即指向“代码> SimeTestEng/Cuth>的指针,否则代码不正确C++”

首先,当您传递指向对象的指针时,程序不会编译。应该是:

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

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

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

还记得,在C++中,创建一个带有<代码>新< <代码>的对象不是强制性的,它可以简单到:

simpleTest obj;  // automatic object, no explicit deallocation

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

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

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


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

使用智能指针,例如
共享\u ptr
唯一\u ptr
我需要为整个项目创建单个实例,如何使用created inst多个对象的引用。谢谢,我想为整个项目创建一个实例