一种自动管理类对象内存的方法及电子设备与流程

文档序号:16529154发布日期:2019-01-05 10:36阅读:142来源:国知局
一种自动管理类对象内存的方法及电子设备与流程

本公开属于windows领域,具体涉及一种自动管理类对象内存的方法及电子设备。



背景技术:

内存是计算机中重要的部件之一,用于暂时存放cpu中的运算数据,以及与硬盘等外部存储器交换的数据。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。在项目开发过程中,需要定义很多的类对象,这样就需要申请很大的内存空间,当申请的对象越来越多时,其所需要的内存势必也越来越多,这样就会影响程序性能,使程序运行越来越慢,进而影响计算机的性能。

常见的管理类对象内存的方法为手动释放对象的内存,即写代码调用delete函数释放内存,但是,当内存对象增多时,经常会由于程序员忘记手动释放该对象,进而造成程序内存泄露,轻则影响程序性能,重则导致程序崩溃。为了避免程序员人为的忘记释放对象造成的内存泄露,设计了一种自动管理类对象内存的方法,定义一个统一的父类,采用父类统一管理所有类对象的内存,该方法有效的完成了自动管理类对象的内存空间,避免程序出现内存泄漏,造成程序崩溃的问题。



技术实现要素:

本公开鉴于上述问题,提供一种自动管理类对象内存的方法及电子设备,能够有效地避免由于程序员人为的忘记释放对象所造成的内存泄漏。

本公开的一个方面提供了一种自动管理类对象内存的方法,包括以下步骤:

s1,定义objectmanager类,所述objectmanager类包括第一接口和第二接口,其中,所述第一接口用于添加所有类对象指针到内存数组列表中,所述第二接口用于删除所有添加过的类对象指针及类对象内存;

s2,定义父类,该父类调用所述第一接口;

s3,设定新创建的类为所述父类的子类,通过调用所述第一接口,添加该子类对象指针到所述内存数组列表中;

s4,程序模块需清理内存空间或程序模块退出时,通过调用所述objectmanager类的第二接口,删除步骤s3中创建的子类对象指针及子类对象的内存。

可选的,所述定义objectmanager类,还包括:在所述objectmanager类的析构函数中自动调用所述第二接口,删除步骤s3中创建的子类对象指针及子类对象的内存。

可选的,所述定义父类,还包括:在所述父类的构造函数中调用所述第一接口,添加类对象指针到内存数组列表中。

可选的,其中,所述第一接口为addobject接口,所述第二接口为deleteallobject接口。

可选的,程序模块需清理内存空间或程序模块退出时,通过调用所述objectmanager类的第二接口,删除步骤s3中创建的子类对象指针及子类对象的内存,还包括:程序模块需清理内存空间时,调用所述第二接口,删除步骤s3中创建的子类对象指针及子类对象的内存;程序模块退出时,调用所述objectmanager类的析构函数,删除步骤s3中创建的子类对象指针及子类对象的内存。

可选的,objectmanager类的对象是全局对象,其他模块也可以获取所述objectmanager类的对象指针。

可选的,其中,设定新创建的类为所述父类的子类,通过调用所述第一接口,添加该子类对象指针到所述内存数组列表中,还包括:所述子类通过调用所述父类的构造函数,添加该子类对象指针到所述内存数组列表中。

本公开另一方面还提供了一种自动管理类对象内存的电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行上述自动管理类对象内存的方法。

本公开另一方面还提供了一种自动管理类对象内存的系统,该自动管理类对象内存的系统包括:objectmanager类定义模块,用于定义objectmanager类,所述objectmanager类包括第一接口和第二接口,其中,所述第一接口用于添加所有类对象指针到内存数组列表中,所述第二接口用于删除所有添加过的类对象指针及类对象内存;父类定义模块,用于定义父类,该父类调用所述第一接口;新创建的类定义模块,用于设定新创建的类为所述父类的子类,通过调用所述第一接口,添加该子类对象指针到所述内存数组列表中;删除模块,用于调用所述objectmanager类的第二接口,删除新创建的子类对象指针及子类对象的内存。

本公开另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述自动管理类对象内存的方法。

附图说明

为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:

图1示意性示出了本公开实施例提供的自动管理类对象内存的方法的流程图。

图2示意性示出了根据本公开的电子设备的框图。

图3示意性示出了根据本公开实施例的自动管理类对象内存的系统的框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。在使用类似于“a、b或c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b或c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“a或b”应当被理解为包括“a”或“b”、或“a和b”的可能性。

附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。

因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。

图1示意性示出了本公开实施例提供的自动管理类对象内存的方法的流程图。

如图1所示,方法包括如下操作:

s101:定义一个objectmanager类。

在上述操作s101中,该objectmanager类主要提供两个接口,addobject接口和deleteallobject接口,分别实现不同的功能。

addobject接口,该接口提供了添加所有类对象指针的功能,类对象指针是一个指向内存中存放类对象的内存地址值。objectmanager对象为类对象指针分配内存数组列表,类对象指针保存在该内存数组列表中。这样定义addobject接口使得所有添加的类对象指针统一保存在objectmanager对象为类对象指针分配的内存数组列表中,有利于统一释放所有添加的类对象的内存空间。

deleteallobject接口,该接口提供了删除所有添加过的类对象指针,以及删除添加过的类对象的内存的功能。由于所有添加过的类对象指针统一保存在内存数组列表中,deleteallobject接口可以统一删除所有添加过的类对象指针,并把这些被删除的类对象指针的值赋值null(置空);从objectmanager对象的内存数组列表当中循环调用delete函数,内存数组列表中保存有所有添加过的类对象指针,delete函数可以删除这些类对象指针指向的类对象,让其释放内存。可以在需要清理内存时手动调用该接口,程序模块退出时也会自动调用该接口。

另外,在操作s101中对析构函数进行优化,在析构函数中自动调用deleteallobject接口。程序模块退出时会自动调用析构函数,析构函数自动调用deleteallobject接口,删除所有添加过的类对象指针,并删除添加过的类对象的内存,就可以避免了程序模块退出时忘记释放内存而造成的内存泄露的的风险。

s102:定义一个统一的父类base类。

在上述操作s102中,在父类base类的构造函数中调用objectmanager类的addobject接口,把当前对象的指针添加到objectmanager类管理的内存数组列表当中。类对象创建内存时,必须首先通过new运算符自动调用构造函数,把该类对象指针添加到objectmanager类管理的内存数组列表中。当定义新的子类对象时,子类继承父类base类,也会首先通过new运算符自动调用构造函数,把该子类对象指针添加到objectmanager类管理的内存数组列表中,避免了手动添加类对象的指针时会有遗漏的情况。

s103:定义一个全局的objectmanager类对象。

在上述操作s103中,在程序模块的cpp文件中,定义一个全局的objectmanager类对象,主要提供两个接口,addobject接口和deleteallobject接口,分别实现添加所有类对象指针、删除所有添加过的类对象指针以及删除添加过的类对象的内存的功能,另外,在析构函数中自动调用deleteallobject接口。删除所有添加过的类对象指针,并删除添加过的类对象的内存。该objectmanager类对象在全部程序运行期间都是有效的,其他模块也可以随时获取objectmanager类的对象指针。

s104:定义新的类对象时,继承父类base类对象。

在上述操作s104中,当程序模块需要定义一个新的类对象时,该新的类对象必须继承父类base类对象,该新的类对象称为子类对象。子类继承父类base类时,会首先通过new运算符自动调用构造函数,把其对象指针添加到操作s4中创建的全局对象objectmanager类管理的内存数组列表中,一方面,避免了手动添加类对象的指针时会有遗漏的情况,另一方面也保证了该子类对象的内存地址管理。

s105:程序模块清理内存时,手动调用objectmanager类对象的deleteallobject接口释放内存。

在上述操作s105中,当程序模块需要清理内存时,程序员可以手动调用objectmanager类对象的deleteallobject接口,实现从objectmanager对象的内存数组列表当中循环调用delete函数,delete函数删除全部创建过的子类对象指针及子类对象的内存,保证了类对象内存空间的统一释放。

s106:程序模块退出时,objectmanager的析构函数自动调用deleteallobject接口释放内存。

在上述操作s106中,全局对象objectmanager会在程序模块退出时自动释放内存,释放内存时会自动调用objectmanager的析构函数,而本公开中对析构函数进行了优化,该objectmanager的析构函数可以自动调用objectmanager类对象的deleteallobject接口释放子类对象指针和子类对象的内存。因此,程序模块退出时,自动执行objectmanager的析构函数,该析构函数自动调用deleteallobject接口释放子类对象指针和子类对象的内存,避免了程序模块退出时程序员忘记手动释放内存的风险,保证了内存的正确释放。

如图2所示,电子设备200包括处理器210、计算机可读存储介质220。该电子设备200可以执行上面参考图1描述的方法,以进行消息处理。

具体地,处理器210例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器210还可以包括用于缓存用途的板载存储器。处理器210可以是用于执行参考图1描述的根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

计算机可读存储介质220,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。

计算机可读存储介质220可以包括计算机程序221,该计算机程序221可以包括代码/计算机可执行指令,其在由处理器210执行时使得处理器210执行例如上面结合图1所描述的方法流程及其任何变形。

计算机程序221可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序221中的代码可以包括一个或多个程序模块,例如包括221a、模块221b、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器210执行时,使得处理器210可以执行例如上面结合图1所描述的方法流程及其任何变形。

根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。

图3示意性示出了根据本公开实施例的自动管理类对象内存的系统的框图。

如图3所示,自动管理类对象内存的系统300包括objectmanager类定义模块310、父类定义模块320、新创建的类定义模块330及删除模块340。

具体地,objectmanager类定义模块310,用于定义objectmanager类,所述objectmanager类包括第一接口和第二接口,其中,该第一接口用于添加所有类对象指针到内存数组列表中,该第二接口用于删除所有添加过的类对象指针及类对象内存。第一接口为addobject接口,可以使所有添加过的类对象指针统一保存在objectmanager对象为类对象指针分配的内存数组列表中;第二接口为deleteallobject接口,该接口通过从objectmanager对象的内存数组列表当中循环调用delete函数,删除这些类对象指针指向的类对象,让其释放内存;优化objectmanager的析构函数,在objectmanager的析构函数中自动调用deleteallobject接口,删除所有添加过的类对象指针及类对象的内存。

父类定义模块320,用于定义父类,该父类调用所述第一接口。在父类的构造函数中调用objectmanager类的addobject接口,把当前对象的指针添加到objectmanager类管理的内存数组列表当中。

新创建的类定义模块,用于设定新创建的类为所述父类的子类,通过调用所述第一接口,添加该子类对象指针到所述内存数组列表中。子类继承父类时,会首先自动调用构造函数,把其对象指针添加到objectmanager类管理的内存数组列表中。

删除模块340,用于调用所述objectmanager类的第二接口,删除新创建的子类对象指针及子类对象的内存。当程序模块需要清理内存时,程序员可以手动调用objectmanager类对象的deleteallobject接口,从objectmanager对象的内存数组列表当中循环调用delete函数,delete函数删除全部创建过的子类对象指针及子类对象的内存;程序模块退出时,自动执行objectmanager的析构函数,该析构函数自动调用deleteallobject接口释放子类对象指针和子类对象的内存。

可以理解的是,objectmanager类定义模块310、父类定义模块320、新创建的类定义模块330及删除模块340可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,objectmanager类定义模块310、父类定义模块320、新创建的类定义模块330及删除模块340中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,objectmanager类定义模块310、父类定义模块320、新创建的类定义模块330及删除模块340中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1