首页 > C++中定义类的对象:用new和不用new的区别

C++中定义类的对象:用new和不用new的区别

Point p1;

Point *p2=new Point();

p1 由系统创建并释放,不用担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。

P2 是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量,还能把对象作为函数返回值。

p1 是在栈空间申请Point大小的空间。new的内存区域是在栈,会自动分配空间,一般在局部变量时使用,函数结束后会自动释放空间。

p2 这是向堆空间申请一个sizeof(Point)大小的空间存放Point对象。(使用new 可以完成对象的构造) 。用new的内在区域是在堆,要自己手动分配空间,使用完后要手动释放空间, 另外栈中空间的分配一般在编译时就知道大小了,而如果要在运行时分配空间,就要使用堆了

转载于:https://www.cnblogs.com/wufengv5/p/3982155.html

更多相关:

  • 强化学习(六) - 连续空间中的强化学习6.1 连续空间中的强化学习6.2 离散空间和连续空间6.3 离散化实例:小车上山6.3.1 相关程序6.3.2 程序注解(1) 环境测试(2) 离散化(3) 模型训练(4) 模型优化...

  • JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地管理代码, 就像 .NET 的命名空间 (namespace) 和 Java 的包 (package) 一样. 为什么需要命名空间...

  • 线元决定空间,通过定义时空线元,获得闵氏空间:     转载于:https://www.cnblogs.com/YouXiangLiThon/p/9907552.html...

  • sql数据库系统表,常用的(sysobjects,sysindexes,sysindexkeys,SYSCOLUMNS,SYSTYPES 及更多解释说明): https://docs.microsoft.com/zh-tw/previous-versions/sql/sql-server-2012/ms177596(v%3dsql....

  • ----------siwuxie095             1、概述 2、栈空间 3、堆空间          1、概述            (布尔类型如果作为单个变量存储数据将占用 4 个字节,如果作为数组中的某个元素只占用 1 个字节)                〔计算机存储数据分为三个空间:寄存器、栈空间、堆空间。...