二次开发语言的C++对象生命周期管理方法、设备、介质转让专利

申请号 : CN201910485835.3

文献号 : CN110362334B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陶超韦锦超吕时有文述生闫少霞王江林李宁周光海肖浩威黄劲风马原徐丹龙杨艺丁永祥刘国光郝志刚

申请人 : 广州南方智能技术有限公司

摘要 :

本发明提供二次开发语言的C++对象生命周期管理方法,包括以下步骤:设计引用计数方式,设计智能指针模板类,设计智能指针模板,编写生成方式代码,配置二次开发环境。本发明涉及电子设备与可读存储介质,用于执行二次开发语言的C++对象生命周期管理方法。本发明解决了C++普通指针对象容易被二次开发语言C#、JAVA等在使用之后直接释放,造成系统崩溃的问题,确保C++内存数据正确的被二次开发语言正确管理,进而提高平台二次开发的稳定性,使得二次开发人员不需要过多的考虑对象本身内存问题,降低开发人员的技术能力的要求,使得研发平台易于被更多的人员进行开发。

权利要求 :

1.二次开发语言的C++对象生命周期管理方法,其特征在于包括以下步骤:

设计引用计数方式,设计具备引用计数方式的类作为基类,将引用计数的成员函数、成员变量写到所述基类中,所有需要使用内部智能指针对象的类都继承所述基类;

设计智能指针模板类,通过设计类模板,由所述类模板直接管理类内部的引用计数、C++对象的普通指针及内存数据;

设计智能指针模板,由继承了所述基类的子类和所述子类使用的智能指针模板类得到智能指针模板,参照代码转换工具中宏的声明和定义方式设计所述智能指针模板,修改所述智能指针模板中的实现方式;

编写生成方式代码,编写代码转换工具的入口文件,在所述入口文件中对所有需要使用智能指针管理的类对象全部使用所述智能指针模板进行声明标记,使用代码转换工具的命令工具方式,执行命令,生成制定的二次开发代码;

配置二次开发环境,将生成的所有二次开发代码生成为相应的动态链接库及C++库,提供给二次开发使用者。

2.如权利要求1所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述设计智能指针模板步骤中,所述代码转换工具具体为简化包以及接口生成器。

3.如权利要求2所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述设计智能指针模板步骤中,修改所述智能指针模板中的实现方式具体为修改所述智能指针模板中生成二次开发语言的方式;修改当C++智能指针作为参数,返回值时二次开发代码的生成方式;修改生成的二次开发对象进入C++代码的方式;修改二次开发语言的类对象在转移到C++端时管理智能指针的方式。

4.如权利要求3所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述设计智能指针模板步骤中,在引用计数转换为二次开发对象时,将普通对象改为智能指针对象接收;在所述智能指针对象转为二次开发语言的普通类时,使用所述智能指针模板标记。

5.如权利要求2所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述编写生成方式代码步骤中,所述入口文件为以.i为后缀的文件。

6.如权利要求5所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述编写生成方式代码步骤中,使用所述简化包以及接口生成器的命令工具方式,执行所述简化包以及接口生成器的命令,生成制定的二次开发代码及若干个二次开发语言文件、一个以.h为后缀的文件和一个以.cxx为后缀的文件。

7.如权利要求6所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述配置二次开发环境步骤具体包括以下步骤:编译文件,使用编译工具对生成的文件进行编译,通过相应的配置对所述以.h为后缀的文件和所述以.cxx为后缀的文件进行编译,通过编译工具编译生成C++的动态链接库;

打包文件,将所有生成的二次开发语言文件打包生成动态链接库;

放置文件,将C++的动态链接库和项目中所有需要的动态链接库一同打包放到二次开发项目运行程序的根目录下。

8.如权利要求7所述的二次开发语言的C++对象生命周期管理方法,其特征在于:所述编译文件步骤中,所述编译工具包括CMake和Visual Studio;所述打包文件步骤中,使用CMake配置生成C#的动态链接库,或者将所有的文件直接配置到Visual Studio的C#动态链接库项目生成动态链接库。

9.一种电子设备,其特征在于包括:处理器;

存储器;以及程序,其中所述程序被存储在所述存储器中,并且被配置成由处理器执行,所述程序包括用于执行权利要求1-8任意一项所述的方法。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行如权利要求1-8任意一项所述的方法。

说明书 :

二次开发语言的C++对象生命周期管理方法、设备、介质

技术领域

[0001] 本发明涉及跨编程语言开发技术领域,尤其涉及二次开发语言的C++对象生命周期管理方法、设备、介质。

背景技术

[0002] 在一个基础平台的研发前提上,为保证自主研发平台具备更高的运行效率,在众多开发语言中,C++属于非常好的选择,C++是一种面向对象的编程语言,而且很多高级编程语言本身是在C++基础上进行封装处理和优化调整的,那么C++自然而然就可以和这些编程语言进行交互,而其他的语言,要么学习成本非常高,例如汇编语言,要么难以和其他语言进行交互,例如C#、Java语言,C语言作为一种函数式语言,编程难度比较高,而且代码难以管理控制,故此选择C++作为编程语言。
[0003] 然而在C++编程实现中,都会对对象指针和内存数据进行管理,需要编程者自己去控制对象指针和内存数据,而大多数高级编程语言如C#、Java,并不会直接管理自身的对象,这些对象的管理都是通过这些高级编程语言本身的垃圾管理机制进行处理,所以在编写C#、JAVA这些高级语言的时候,不需要直接管理对象内存。
[0004] SWIG工具作为一种代码转换工具,内部对智能指针的使用包括C++11库中的std::shared_ptr,但是C++11并不适合所有的平台,有些比较老旧的系统(window、linux、android等)无法支持C++11,造成没办法进行二次开发,使得平台本身不支持C++11的标准库,故不采取std::shared_ptr,SWIG还支持boost::shared_ptr,但由于C++boost库过于庞大,平台为了保证整个系统的精简和稳定,放弃了boost库。因此,亟需一种用于解决处理C++普通指针对象容易被二次开发语言C#、JAVA等在使用之后直接释放,造成系统崩溃问题的C++与面向对象二次开发语言之间对象的生命周期管理方法。

发明内容

[0005] 为了克服现有技术的不足,本发明的目的在于提供二次开发语言的C++对象生命周期管理方法,解决了C++普通指针对象容易被二次开发语言C#,JAVA等在使用之后直接释放,造成系统崩溃的问题。
[0006] 本发明提供二次开发语言的C++对象生命周期管理方法,包括以下步骤:
[0007] 设计引用计数方式,设计具备引用计数方式的类作为基类,将引用计数的成员函数、成员变量写到所述基类中,所有需要使用内部智能指针对象的类都继承所述基类;
[0008] 设计智能指针模板类,通过设计类模板,由所述类模板直接管理类内部的引用计数、C++对象的普通指针及内存数据;
[0009] 设计智能指针模板,由继承了所述基类的子类和所述子类使用的智能指针模板类得到智能指针模板,参照代码转换工具中宏的声明和定义方式设计所述智能指针模板,修改所述智能指针模板中的实现方式;
[0010] 编写生成方式代码,编写代码转换工具的入口文件,在所述入口文件中对所有需要使用智能指针管理的类对象全部使用所述智能指针模板进行声明标记,使用代码转换工具的命令工具方式,执行命令,生成制定的二次开发代码;
[0011] 配置二次开发环境,将生成的所有二次开发代码生成为相应的动态链接库及C++库,提供给二次开发使用者。
[0012] 进一步地,所述设计智能指针模板步骤中,所述代码转换工具具体为简化包以及接口生成器。
[0013] 进一步地,所述设计智能指针模板步骤中,是修改所述智能指针模板中的实现方式具体为修改所述智能指针模板中生成二次开发语言的方式、当C++智能指针作为参数、返回值时二次开发代码的生成方式、生成的二次开发对象进入C++代码的方式、二次开发语言的类对象在转移到C++端时管理智能指针的方式。
[0014] 进一步地,所述设计智能指针模板步骤中,在引用计数转换为二次开发对象时,将普通对象改为智能指针对象接收,在所述智能指针对象转为二次开发语言的普通类时,使用所述智能指针模板标记。
[0015] 进一步地,所述编写生成方式代码步骤中,所述入口文件为以.i为后缀的文件。
[0016] 进一步地,所述编写生成方式代码步骤中,使用所述简化包以及接口生成器的命令工具方式,执行所述简化包以及接口生成器的命令,生成制定的二次开发代码及若干个二次开发语言文件、一个以.h为后缀的文件和一个以.cxx为后缀的文件。
[0017] 进一步地,所述配置二次开发环境步骤具体包括以下步骤:
[0018] 编译文件,使用编译工具对生成的文件进行编译,通过相应的配置对所述以.h为后缀的文件和所述以.cxx为后缀的文件进行编译,通过编译工具编译生成C++的动态链接库;
[0019] 打包文件,将所有生成的二次开发语言文件打包生成动态链接库;
[0020] 放置文件,将C++的动态链接库和项目中所有需要的动态链接库一同打包放到二次开发项目运行程序的根目录下。
[0021] 进一步地,所述编译文件步骤中,所述编译工具包括CMake和Visual Studio;所述打包文件步骤中,使用CMake配置生成C#的动态链接库,或者将所有的文件直接配置到Visual Studio的C#动态链接库项目生成动态链接库。
[0022] 一种电子设备,包括:处理器;
[0023] 存储器;以及程序,其中所述程序被存储在所述存储器中,并且被配置成由处理器执行,所述程序包括用于执行上述二次开发语言的C++对象生命周期管理方法。
[0024] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行上述二次开发语言的C++对象生命周期管理方法。
[0025] 相比现有技术,本发明的有益效果在于:
[0026] 本发明提供二次开发语言的C++对象生命周期管理方法,包括以下步骤:设计引用计数方式,设计智能指针模板类,设计智能指针模板,编写生成方式代码,配置二次开发环境。本发明涉及电子设备与可读存储介质,用于执行二次开发语言的C++对象生命周期管理方法。本发明解决了C++普通指针对象容易被二次开发语言C#、JAVA等在使用之后直接释放,造成系统崩溃的问题,确保C++内存数据正确的被二次开发语言正确管理,进而提高平台二次开发的稳定性,使得二次开发人员不需要过多的考虑对象本身内存问题,降低开发人员的技术能力的要求,使得研发平台易于被更多的人员进行开发。
[0027] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。

附图说明

[0028] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0029] 图1为本发明的二次开发语言的C++对象生命周期管理方法流程图。

具体实施方式

[0030] 下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
[0031] 二次开发语言的C++对象生命周期管理方法,如图1所示,包括以下步骤:
[0032] 自定义属于代码转换工具平台本身的智能指针实现方式,处理C++类指针对象的引用计数,具体包括以下步骤:
[0033] 设计引用计数方式,设计具备引用计数方式的类作为基类,将引用计数的成员函数、成员变量写到基类中,所有需要使用内部智能指针对象的类都继承基类;如引用计数类class refCount{...},内部管理引用计数的操作方式。
[0034] 设计智能指针模板类,通过设计类模板,由类模板直接管理类内部的引用计数,管理该对象的普通指针及内存数据,保证整个C++对象具备指针内存一致性特点。如:template;class Smart_Object{....},内部处理如何调用refCount()的引用计数变化。
[0035] 设计智能指针模板,由继承了基类的子类和子类使用的智能指针模板类得到智能指针模板,如:由继承了具备引用计数方式的类“A”的子类“C”,并且该类使用了智能指针模板B,B代表智能指针模板类,class代表继承了具备引用计数方式的类的子类,得到B,那么C的对象内存就实现了类似于C++11智能指针模板std::shared_ptr的功能。除此之外,也可以模仿std::shared_ptr管理引用计数的方式以及std::shared_ptr的模板,设计自己的引用计数模板。
[0036] 自定义处理SWIG代码转换工具,保证C++普通对象被转换之后属于智能指针对象,具体包括以下步骤:
[0037] 参照代码转换工具中宏的声明和定义方式设计智能指针模板,修改智能指针模板中的实现方式;优选的,代码转换工具具体为简化包以及接口生成器(SWIG),具体的,参照SWIG中宏的声明和定义方式,类似于std::shared_ptr的定义方式设计处理智能指针模板,例如声明为%Smart_Object(TYPE……)。基于SWIG开源代码转换工具的代码细节管理的编程方法,使得C++对象保持一致性。
[0038] 修改智能指针模板中如何生成二次开发语言的方式,修改模板中在遇到C++智能指针作为参数,作为返回值时候,二次开发代码如何生成,同时修改生成的二次开发对象如何进入C++代码,二次开发语言的类对象在转移到C++端的时候,如何去管理智能指针。在整个过程中,处理好引用计数,一般设计为C++普通指针,在转换为二次开发对象的时候,将普通对象改为智能指针对象接受,保证引用计数加1;智能指针对象转为二次开发语言的普通类,使用模板标记即可,例如%Smart_Object(C),其中C是代表继承了具备引用计数方式的类的子类。
[0039] 使用SWIG生成二次开发代码,具体包括以下步骤:
[0040] 编写生成方式代码,编写代码转换工具的入口文件,在入口文件中对所有需要使用智能指针管理的类对象全部使用智能指针模板进行声明标记;SWIG的入口文件为以.i为后缀的文件,后文称为.i文件,具体的,编写.i文件,在.i文件中对所有需要使用智能指针管理的类对象,全部使用%Smart_Object()模板进行声明标记,如%Smart_Object(C),其中C是代表继承了具备引用计数方式的类的子类;
[0041] 使用SWIG命令工具方式,执行SWIG命令,生成制定的二次开发代码,在这个过程中会生成若干个二次开发语言文件(生成的文件与.i文件的写法有关)、一个以.h为后缀的文件(C语言头文件)和一个以.cxx为后缀的文件(C语言具体函数实现文件)。
[0042] 配置二次开发环境,将生成的所有二次开发代码生成为相应的动态链接库及平台的C++库,提供给二次开发使用者。具体包括以下步骤:
[0043] 编译文件,使用编译工具对生成的文件进行编译,配置好相应的配置对以.h为后缀的文件和以.cxx为后缀的文件进行编译,通过编译工具编译生成C++的动态链接库;采取CMake,也可以配置到Visual Studio等,编译生成一个C++dll库,dll指的是动态链接库;
[0044] 打包文件,将所有生成的二次开发语言文件打包,一起生成动态链接库;例如C#文件,使用CMake配置生成C#dll,或者将所有的文件直接配置到VisualStudio的C#动态链接库项目中,直接生成即可;
[0045] 放置文件,将C++的动态链接库和项目中所有需要的动态链接库,包括编译文件步骤中生成的C++dll和原C++项目中的dll,以及打包文件步骤中的C#dll一同打包放到二次开发项目运行程序的根目录下,此配置之后整个二次开发就可以正常调试和运行了。
[0046] 一种电子设备,包括:处理器;
[0047] 存储器;以及程序,其中程序被存储在存储器中,并且被配置成由处理器执行,程序包括用于执行上述二次开发语言的C++对象生命周期管理方法。
[0048] 一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行上述二次开发语言的C++对象生命周期管理方法。
[0049] 本发明提供二次开发语言的C++对象生命周期管理方法,包括以下步骤:设计引用计数方式,设计智能指针模板类,设计智能指针模板,编写生成方式代码,配置二次开发环境。本发明涉及电子设备与可读存储介质,用于执行二次开发语言的C++对象生命周期管理方法。本发明解决了C++普通指针对象容易被二次开发语言C#、JAVA等在使用之后直接释放,造成系统崩溃的问题,确保C++内存数据正确的被二次开发语言正确管理,进而提高平台二次开发的稳定性,使得二次开发人员不需要过多的考虑对象本身内存问题,降低开发人员的技术能力的要求,使得研发平台易于被更多的人员进行开发。
[0050] 以上,仅为本发明的较佳实施例而已,并非对本发明作任何形式上的限制;凡本行业的普通技术人员均可按说明书附图所示和以上而顺畅地实施本发明;但是,凡熟悉本专业的技术人员在不脱离本发明技术方案范围内,利用以上所揭示的技术内容而做出的些许更动、修饰与演变的等同变化,均为本发明的等效实施例;同时,凡依据本发明的实质技术对以上实施例所作的任何等同变化的更动、修饰与演变等,均仍属于本发明的技术方案的保护范围之内。