首页 > 编程语言 >C++用new创建的对象和不用new创建的对象的区别

C++用new创建的对象和不用new创建的对象的区别

时间:2023-04-29 16:00:38浏览次数:45  
标签:对象 创建 成员 创建对象 C++ 多态 关键字 new

 

在C++中,使用new关键字来创建对象时,与不使用new关键字来创建对象时,会产生以下几个区别:

  1. 内存管理:使用new关键字来创建对象时,由编译器来决定分配内存的方式,这样可以更有效地利用内存资源。而不使用new关键字来创建对象时,则需要手动分配内存,可能会浪费一些内存资源。
  2. 对象生命周期:使用new关键字来创建对象时,新分配的对象具有与类的构造函数一致的生命周期,即在类的析构函数被调用时,对象将被销毁。而不使用new关键字来创建对象时,新分配的对象的生命周期由分配的内存决定,可能在类的析构函数之后还会保留对象的状态。
  3. 变量访问:在使用new关键字来创建对象时,如果类定义了私有成员变量,则只能在类的内部访问这些变量,而不能在类的外部访问。而不使用new关键字来创建对象时,如果类定义了私有成员变量,则可以在类的内部和外部访问这些变量。
  4. 继承:在使用new关键字来创建对象时,子类的对象将继承父类的非私有成员变量和非私有成员函数。而不使用new关键字来创建对象时,子类的对象将重新定义父类的非私有成员变量和非私有成员函数。
  5. 多态:使用new关键字来创建对象时,如果类定义了多态成员函数,则在调用这些多态成员函数时,将创建对应类型的新对象,而不是调用父类的非多态成员函数。而不使用new关键字来创建对象时,如果类定义了多态成员函数,则仍然调用父类的非多态成员函数。

总的来说,使用new关键字来创建对象可以更有效地利用内存资源,具有更好的对象生命周期管理,可以避免手动分配内存带来的浪费,并且可以实现更好的多态性。

 

 

########################

标签:对象,创建,成员,创建对象,C++,多态,关键字,new
From: https://www.cnblogs.com/herd/p/17364082.html

相关文章

  • [CEOI2021] Newspapers
    模拟赛没有判\(n=1\),喜提\(0\)分。感谢每个subtask都放\(n=1\)的善良出题人。看到题感觉A的操作好像比较弱小,唯一的用处似乎只能用来排除B在哪些位置,那这样就有一个暴力了,直接记录当前还有哪些点上可能有B,然后直接跑bfs,就可以通过第一档分了。看到第二档分似乎比较......
  • 我刚才用了dynamic_cast 你给我普及一下C++ 中这几种类型转换吧
    我刚才用了dynamic_cast你给我普及一下C++中这几种类型转换吧在C++中,有几种类型转换的方式,包括:隐式转换在一些情况下,编译器会自动进行类型转换。比如将整型变量赋值给浮点型变量,编译器就会自动将整型变量转换为浮点型变量。但是在大多数情况下,使用隐式转换可能会引起一些问......
  • Midjourney 创建私人画图机器人(保姆级教程)
    本教程收集于:AIGC从入门到精通教程汇总之前给大家介绍过了Midjourney的注册教程:AI绘画:Midjourney注册(保姆级教程)也有StableDiffusion(开源)的本地搭建教程:AI数字绘画:stable-diffusion本地部署教程你是不是遇到以下问题:1.Midjourney会员怎么自建绘图服务器,不受其他人的打扰?......
  • 4-28打卡c++ string容器
    1#include<iostream>2#include<string>3usingnamespacestd;4//assign5voidtest01()6{7stringstr1;8//截取三个字符9str1.assign("hello,world",3);10//从第三个字符开始截取4个字符11str1.assign("hello,worl......
  • 【python基础】创建和删除目录
    前言importosimportshutilpath='/home/tfl19671/out'ifnotos.path.exists(path):os.mkdir(path)else:shutil.rmtree(path,True)os.mkdir(path)其中shutil.rmtree(filepath,ignore_errors=True)删除整个filepath路径的内容。如果ignore_errors=True,则表示删除......
  • Win32 API从磁盘文件图片创建工具栏图标
    关键字:Win32API从磁盘,文件,图片创建工具栏图标,包含提示文字。编译命令:g++demo01.cpp-mwindows-lcomctl32-ldwmapi-odemo01-static-Wall-std=c++11#defineUNICODE#include<Windows.h>#include<strsafe.h>#include<commctrl.h>/******CALLBACK代表__stdcall......
  • C++ 中 string自带的find()详解
    首先find()函数存在于string对象中,对于任何一个string类对象都自带find函数,这意味着我们可以对find函数进行重载。find()一共可传七个参数,但是常用的的只有四种情况:对于C++98来说:string(1)传入两个参数,一个是对另一string对象的常引用,一是开始查找的位......
  • c++中的构造函数
    C++中的构造函数可以分为一下几种:默认构造函数初始化构造函数(有参数)拷贝构造函数移动构造函数(move和右值引用)委托构造函数转换构造函数#include<iostream>usingnamespacestd;classStudent{public:Student(){//默认构造函数,没有参数this->age=20......
  • C++中函数重载和重写的区别是什么?
    函数重载:利用命名矫正(namemangling)技术,在编译时把函数名加上参数的首字母来区分同名函数。需要满足3个条件:1.同一个作用域下2.函数名相同3.函数参数类型不同,参数个数不同,参数顺序不同 示例:1......
  • VS2010创建Webservice程序
    VisualStudio2010中已经找不到直接创建WebService的模板方式了,但下面的方法可心实现:  在VisualStudio2010的新建Web应用程序或者Web网站窗口中,如果你选择.NET4.0,会发现缺少了ASP.NETWebServices模板。你可能会怀疑VS2010是不是不支持ASP.NETWebServices......