C++创建对象的三种方式
来源:互联网 发布:直角坐标机械手编程 编辑:程序博客网 时间:2024/05/29 16:43
C++中有三种创建对象的方法
#include <iostream>using namespace std;class A{private: int n;public: A(int m):n(m) { } ~A(){}};int main(){ A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 delete c; return 0;}
第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放。采用第三种方式时,必须注意一下几点问题:
- new创建类对象需要指针接收,一处初始化,多处使用
- new创建类对象使用完需delete销毁
- new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
- new对象指针用途广泛,比如作为函数返回值、函数参数等
- 频繁调用场合并不适合new,就像new申请和释放内存一样
- 栈的大小远小于堆的大
- 栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率 比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会 分 到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
- Java创建对象的三种方式
- C++创建对象的三种方式
- html5创建对象的三种方式
- 创建线程对象的三种方式
- C++创建对象的三种方式
- JavaScript创建对象的三种方式
- C++创建对象的三种方式
- 自定义对象创建的三种方式
- C++创建对象的三种方式
- JavaScript创建自定义对象的三种方式
- Spring容器创建对象的三种方式
- JavaScript 创建对象的常见三种方式
- Java:创建Class对象的三种方式/
- js创建对象的三种基本方式
- spring IOC容器创建对象的三种方式
- C++创建类对象的三种方式区别
- Spring IOC创建对象的三种方式
- Spring容器创建对象的三种方式
- Java学习系列(九)Java面向对象之异常机制详解
- C++ 排序方法集锦
- 面试题目
- Activity 变成对话框,然后再隐藏?
- 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析(含代码)
- C++创建对象的三种方式
- script 编译成 asset 解决方案
- iPhone iPad 各种控件默认高度
- 佛教“三毒”
- 关于QTP和loadrunner的学习
- SQL SErver存储过程和用户自定义函数UDF
- sap启用应用
- 让你的旧电脑重获新生的5个Linux发行版
- jsp动态输出后台查询内容