C++ 对象创建方式
2013-11-23 15:55
246 查看
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。
这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。
(3) 从堆上分配的。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。
不使用new创建的对象在栈中分配内存空间,自动调用析构函数删除该对象;
使用new创建的对象在堆中分配内存空间,必须手动释放该对象的内存空间。
new之前不为该类对象分配任何内存空间,new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。
new创建类对象需要指针接收,一处初始化,多处使用
new创建类对象使用完需delete销毁
new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
new对象指针用途广泛,比如作为函数返回值、函数参数等
频繁调用场合并不适合new,就像new申请和释放内存一样
这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。
(3) 从堆上分配的。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。
不使用new创建的对象在栈中分配内存空间,自动调用析构函数删除该对象;
使用new创建的对象在堆中分配内存空间,必须手动释放该对象的内存空间。
1、使用new方式创建类对象
CTest* pTest = new CTest(); delete pTest;
new之前不为该类对象分配任何内存空间,new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。
2、使用变量定义方式创建类对象
CTest mTest;在创建之初就已经分配了内存空间,此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行
3、new创建类对象与不new区别
下面是自己总结的一些关于new创建类对象特点:new创建类对象需要指针接收,一处初始化,多处使用
new创建类对象使用完需delete销毁
new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
new对象指针用途广泛,比如作为函数返回值、函数参数等
频繁调用场合并不适合new,就像new申请和释放内存一样
相关文章推荐
- c++创建对象的两种方式
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- C++之创建对象的方式详解
- Java创建对象的方式和C++有什么不同
- C++创建对象的三种方式
- 用jni的方式c/c++语言创建Java对象
- C++创建对象的两种方式
- C++创建对象的方式和区别
- c++创建对象的两种方式
- [C++]--对象创建的两种方式
- C++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- C/C++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- 小朋友学C++(16):C++创建对象的3种方式
- c++创建对象的两种方式
- C++创建对象的三种方式
- c++创建对象的两种方式