c++中用new和不用new创建对象的本质区别

2023-05-16

1:作用域不同

不用new:作用域限制在定义类对象的方法中,当方法结束时,类对象也被系统释放了,(安全不会造成内存系统泄漏)。

用new:创建的是指向类对象的指针,作用域变成了全局,当程序结束时,必须用delete删除,系统不会自动释放,(不注意可能造成内存泄漏)。

2:一个类对象,一个是指向类对象的指针。

   

1.c++中

1. 声明只是表示一个对象的引用,比如我们的语句:

MyClasee myclass;

这里是一个空引用,而通过new关键字可以实例化一个MyClasee的实例

所以语句:

myclass = new MyClass();

2.栈,放的是局部变量,他的生存期就是他所处的语句块(也就是离他最近的一对{}),离开了他的生存期他就失效了,一般声明形式就是在栈中定义的。堆上的空间需要你用new申请,用delete或者delete[]归还,在进程的范围内,该内存的生存期就完全由你操作了;

3.C++里的new负责的是内存的分配,并不负责把实例初始化成有效状态。而C#则两步都要做。所以我们经 常在C++里new一个对象或者用指针操作对象的时候,要先清零或者设置null,但是在C#里一般不用这么做,因为它已经做了这一步。

-----------------------------------------------------------------------------

(1)CFont myFont;//定义了myFont变量,然后就可以直接用myFont变量了
(2)CFont myFont = new CFont();//myFont也可以直接使用了
这两个有什么区别吗?

空间分配的位置不一样

第一个系统管理内存
第二个需要自己管理释放

直接创建是编译器就留出了空间,在程序装入的数据段里

用new创建的空间是运行期在堆空间分配,用完后要自己记得归还(delete)

 

2.java中

使用new来创建,那么程序就会在heap上分配空间来储存它,但是当你引用的时候则不然,你可以为它分配空间也可不分配,看你需要了!分配了就是个对象,如果不分配就是null,不占用任何硬件资源。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中用new和不用new创建对象的本质区别 的相关文章

随机推荐

  • C# 调用C++ DLL 的类型转换对应列表

    C 调用C 43 43 的DLL搜集整理的所有数据类型转换方式 可能会有重复或者多种方案 自己多测试 c 43 43 HANDLE void c System IntPtr c 43 43 Byte unsigned char c Syst
  • 编写程序重复定义Bug(multiple definition of)解析

    如果两个函数 方法重复定义就会报 multiple definition of 错误 xff1b 如果非要定义两个函数同名 xff0c 则可以在函数前加static xff0c 便可以将两个同名函数编译过 1 给每一个头文件加条件编译 在编
  • qt中QString与char *类型相互转换

    在进行编程时 xff0c 我们经常需要用到字符串这种类型 xff0c 毫无疑问 xff0c Qt 库中也对字符串类型进行了封装 xff0c QString 类提供了你能想到的所有字符串操作方法 xff0c 给开发者带来了极大方便 但是我们在
  • 总结以下三种方法,实现c#每隔一段时间执行代码:

    总结以下三种方法 xff0c 实现c 每隔一段时间执行代码 xff1a 方法一 xff1a 调用线程执行方法 xff0c 在方法中实现死循环 xff0c 每个循环Sleep设定时间 xff1b 方法二 xff1a 使用System Time
  • struct的创建

    本文实例分析了C 中结构 struct 的部分初始化和完全初始化 xff0c 分享给大家供大家参考 具体分析如下 xff1a 假设有这样一个值类型struct xff0c 如下所示 xff1a 1 2 3 4 5 6 7 8
  • c++全局变量的正确声明

    C 43 43 中全局变量声明错误情况 造成 LNK2005 错误主要有以下几种情况 xff1a 1 xff0e 重复定义全局变量 可能存在两种情况 xff1a A 对于一些初学编程的程序员 xff0c 有时候会以为需要使用全局变量的地方就
  • C++函数声明和定义

    在上一节 xff0c 我们已经学会了如何阅读函数原型和如何调用一个函数 然而 xff0c 仅靠系统给出的标准库函数是不够用的 我们有时候要根据我们的实际要求 xff0c 写出一个合适自己使用的函数 那么 xff0c 我们如何来自己动手编写一
  • cpp之间函数引用和类引用的方法

    除了 include外 xff0c cpp文件之间怎么引用函数 file C h ifndef FOO H define FOO H extern void sayHello endif FOO H file B cpp include 3
  • 在C++中调用DLL中的函数

    1 dll 的优点 代码复用是提高软件开发效率的重要途径 一般而言 xff0c 只要某部分代码具有通用性 xff0c 就可将它构造成相对独立的功能模块并在之后的项目中重复使用 比较常见的例子是各种应用程序框架 xff0c ATL MFC 等
  • HC-SR04超级简单教程(快速入门)

    目录 一 模块介绍 xff08 个人理解 xff09 1 简单理解 2 该模块的参数 二 HC SR04的操作 三 代码 1 代码前的注意事项 2 关键代码 四 代码实战效果图 五 结束 一 模块介绍 xff08 个人理解 xff09 1
  • C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)

    头文件 h xff1a 写类的声明 xff08 包括类里面的成员和方法的声明 xff09 函数原型 define常数等 xff0c 但一般来说不写出具体的实现 在写头文件时需要注意 xff0c 在开头和结尾处必须按照如下样式加上预编译语句
  • c#的接口详解

    什么是接口 xff1f 其实 xff0c 接口简单理解就是一种约定 xff0c 使得实现接口的类或结构在形式上保持一致 个人觉得 xff0c 使用接口可以使程序更加清晰和条理化 xff0c 这就是接口的好处 xff0c 但并不是所有的编程语
  • C语言中的全局变量定义与使用

    1 书中对 全局变量 的定义 在函数内定义的变量是局部变量 xff0c 而在函数外定义的变量叫做外部变量 xff0c 外部变量是全局变量 全局变量可以为本文件中其他函数所共用它的有效范围从定义变量的位置开始到本源文件结束 建立全局变量的作用
  • C,C++,C#note

    1 c 43 43 中的类的定义和声明可以都写在头文件中 xff0c 然后cpp文件include头文件 xff1b 也可以声明在头文件 xff0c 定义在cpp文件 xff1b 或者所有声明和定义都放在cpp文件 xff1b 混写定义与声
  • 在C++中可以用3种方法访问一个字符串

    用字符数组存放一个字符串 例6 10 定义一个字符数组并初始化 xff0c 然后输出其中的字符串 ol class snippet num style margin top 0px margin bottom 0px margin left
  • 动态存储和静态存储区域区别

    动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式 动态存储变量是在程序执行过程中 xff0c 使用它时才分配存储单元 xff0c 使用完毕立即释放 典型的例子是函数的形式参数 xff0c 在函数定义时并不
  • c++中默认32位int类型转换截取高位部分

    int类型的变量固定为4个字节 xff0c 共32位 int类型变量初始值一般为0 xff0c 范围 2 31 2 31 1 即 2147483648 xff0c 2147483647 16 位系统下 xff0c int 是 2 个字节 x
  • c#-接口

    c 中的接口中必须是未实现的方法 xff0c 例如属性 xff0c 事件 xff0c 索引器 xff0c 一般函数等 除此之外不能有其他的成员 xff0c 类可以继承两个或两个以上的接口 xff0c 派生类中必须实现接口中的所有方法
  • C# SerialPort 读写三菱FX系列PLC

    1 xff1a 串口初始化 com 61 new SerialPort 34 COM3 34 9600 Parity Even 7 StopBits One 2 xff1a 打开关闭串口 if com IsOpen com Close co
  • c++中用new和不用new创建对象的本质区别

    1 xff1a 作用域不同 不用new xff1a 作用域限制在定义类对象的方法中 xff0c 当方法结束时 xff0c 类对象也被系统释放了 xff0c xff08 安全不会造成内存系统泄漏 xff09 用new xff1a 创建的是指向