C++对象创建的几种方式

您所在的位置:网站首页 光环操作方式有几种方式 C++对象创建的几种方式

C++对象创建的几种方式

2023-12-16 04:29| 来源: 网络整理| 查看: 265

           C++对象创建的几种方式

   由于公司的项目众多,且底层由众多团队操刀实施,这样不利于代码的管理和平台的统一性,所以为了将众多的底层C实现的代码整合起来,不得不借助C++的面相对象,而我也不得不捞起早已经忘的差不多的C++语法了。下面先来点简单的C++中对象创建的几种方式。

具体实现

   先直接上代码,给大家演示一下,后续再来详细解释几种创建的方式,具体代码如下:

#include using namespace std; class ObjectClass{ public: void fun(){ printf("Hello, Im c++ objectClass\n"); } }; int main(){ ObjectClass obj1;//栈中分配 ,由操作系统进行内存的分配和管理 ObjectClass obj2 = obj1; //栈中分配 ,由操作系统进行内存的分配和管理 obj1.fun();//"." 是结构体成员引用 obj2.fun();//"." 是结构体成员引用 ObjectClass * obj3 = new ObjectClass(); //堆中分配 ,由管理者进行内存的分配和管理,用完必须delete(),否则可能造成内存泄漏 obj3->fun();//->是指针引用 delete(obj3); return 0; } root@A920:/system/bin # ./ObjectClass Hello, Im c++ objectClass Hello, Im c++ objectClass Hello, Im c++ objectClass

上面就是具体的演示代码,下面分析一下几种创建方式: (1).第一种和第二种:这两种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存。用这种方法创建的对象,内存分配到栈里(Stack)。使用 “.” 而不是 “->” 调用对象的方法。当程序离开对象的使用范围(如方法结束,一个程度块的最后{}),范围内的栈中的对象会自动删除,内存自动回收。这是创建对象最简单的方式栈是系统数据结构,对于线程/进程是唯一的,它的分配和释放由操作系统决定,不需要由开发者来管理。在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行完毕,系统会自动释放这些存储单元。

(2).第三种:使用了new,在堆中分配了内存,堆上的内存分配,亦称动态内存分配。程序在运行的期间用malloc申请的内存,这部分内存由程序员自己负责管理,其生存期由开发者决定:在何时分配,分配多少,并在何时用free来释放该内存。这是唯一可以由开发者参与管理的内存。使用的好坏直接决定系统的性能和稳定。注意:栈中内存的分配和管理由操作系统决定,而堆中内存的分配和管理由管理者决定。在堆中的对象不会自动删除,内存不会自动回收,所以new一个对象使用完毕,必须调用delete,释放内存空间。也就是说,new和delete必须成对出现

我们需要的内存很少,你又能确定你到底需要多少内存时,用栈。当你需要在运行时才知道你到底需要多少内存时,请用堆。

总结

   最后我们来总结一下C++语法new创建对象的特点和C++内存分配常见的几种方式:

(1) 关于new创建类对象特点:

new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间 new对象指针用途广泛,比如作为函数返回值、函数参数等 频繁调用场合并不适合new,就像new申请和释放内存一样

(2).C++内存分配三种方式:

从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。

在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。

从堆上分配的。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3