编程学习 | c++创建对象的三种方式

第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放。

采用第三种方式时,必须注意一下几点问题:

new创建类对象需要指针接收,一处初始化,多处使用

new创建类对象使用完需delete销毁

new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间

new对象指针用途广泛,比如作为函数返回值、函数参数等

频繁调用场合并不适合new,就像new申请和释放内存一样

栈的大小远小于堆的大

栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率 比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,

例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),

扫描二维码关注公众号,回复: 13000490 查看本文章

就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会 分 到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多

#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;

}


另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习:

编程学习:

猜你喜欢

转载自blog.csdn.net/weixin_45713725/article/details/115082877