C++ 对象创建方式

来源:互联网 发布:视频监控数据恢复 编辑:程序博客网 时间:2024/05/18 03:34

原址

C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test  或者 Test* pTest = new Test()。

        这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种
      (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。 
      (2)  在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。

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

不使用new创建的对象在栈中分配内存空间,自动调用析构函数删除该对象;

    使用new创建的对象在堆中分配内存空间,必须手动释放该对象的内存空间。


1、使用new方式创建类对象

[cpp] view plain copy
  1. CTest* pTest = new CTest();  
  2. delete pTest;  

new之前不为该类对象分配任何内存空间,new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。

2、使用变量定义方式创建类对象


[cpp] view plain copy
  1. CTest mTest;  
在创建之初就已经分配了内存空间,此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行

3、new创建类对象与不new区别


下面是自己总结的一些关于new创建类对象特点:

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