本文主要介绍在 C++ 编程语言中,创建类的对象(类的初始化)的两种方法,这两种方法分别为:“直接使用类名创建对象”和“使用 new 关键字创建对象”。

1 概述

“直接使用类名创建对象”和“使用 new 关键字创建对象”两种方法的区别如下:

  • 使用 new 关键字创建的对象会赋值给类指针,此对象可在多处使用;
  • 使用 new 关键字创建的对象在使用完成后,必须要使用 delete 销毁该对象,否则会造成内存泄露(new 申请的对象,只有调用到 delete 时才会执行析构函数);而直接使用类名创建的对象,则不需要手动销毁该对象,因为该类的析构函数会自动执行;
  • 使用 new 关键字创建的对象使用的是堆空间;而在局部、直接使用类名创建的对象则使用栈空间;
  • 使用 new 关键字创建的对象会赋值给类指针,该指针用途广泛,比如作为函数返回值、函数参数等;
  • 频繁调用(不同)对象的场合并不适合使用 new 方法创建对象,原理同 new 申请和 delete 释放内存。

综上,在决定使用哪种方式创建类的对象时,需要根据实际的应用场景,选择合适的方法。

2 示例代码

这里编写了一份简单的示例代码,展示了“直接使用类名创建对象”和“使用 new 关键字创建对象”两种创建类的对象的方法。

示例代码(class_init_test1.cpp)的内容如下:

#include "iostream"
#include "string"using namespace std;class ClassOne
{
public:int m_one;
public:void PrintSomething(const string& strInput, const int& nInput);
};void ClassOne::PrintSomething(const string & strInput, const int & nInput)
{cout << strInput << nInput << endl;
}int main()
{// 直接使用类名创建对象ClassOne c1;c1.m_one = 1;string strSomething = "m_one value is: ";c1.PrintSomething(strSomething, c1.m_one);// 使用new创建对象ClassOne *c2 = new ClassOne();c2->m_one = 2;c2->PrintSomething(strSomething, c2->m_one);if (NULL != c2){// 使用delete删除对象delete c2;c2 = NULL;}return 0;
}

编译并运行上述代码,运行结果如下:

C++编程语言中创建类的对象(类的初始化)的方法相关推荐

  1. 面向过程和面向对象的设计思想、java类、Java类的定义、java对象、对象的创建和使用、类和对象、变量分类、方法分类、构造方法、方法的重载

    1.面向过程和面向对象的设计思想 面向过程:procedure oriented programming 缩写 POP. 分析出解决问题所需要的步骤,然后把步骤一步一步实现. 面向过程直接关注流程. ...

  2. 1~22(面向编程+ES6中的类和对象+类的继承+面向对象版tab栏切换)

    1 面向对象编程介绍 1.1 两大编程思想 面向过程 面向对象 1.2 面向过程编程POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤,然后用函 ...

  3. 设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息

    设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息 class Employee { //雇员类private String id; //编号private String name; / ...

  4. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | dex_file.cc 中创建 DexFile 实例对象的相关函数分析 )

    文章目录 前言 一.dalvik_system_DexFile.cc#CreateDexFile 函数分析 二.dex_file.cc#DexFile::Open 函数分析 三.dex_file.cc ...

  5. c#语言中怎么实现延时功能,timer-在C#中创建“一次运行”延时功能的最佳方法...

    timer-在C#中创建"一次运行"延时功能的最佳方法 我正在尝试创建一个接受Action和Timeout并在Timeout之后执行Action的函数. 该功能是非阻塞的. 该函数 ...

  6. vue 对象判断为空_Vue中可用的判断对象是否为空的方法

    vue有两个方法可用 1. JSON.stringify(evtValue)=='{}' 2. Object.keys(xxx).length==0 js判断对象是否为空对象的几种方法 1.将json ...

  7. java在类中创建自己对象_java 在类中创建自己的对象

    public class A() { int yy=0; public static void main(String[] agrs) { A aa=new A(); } } 我想知道的是,A是一个类 ...

  8. Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数

    一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...

  9. 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)

    面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...

  10. python的类和对象——类的静态字段番外篇

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

最新文章

  1. 在markdown里面插入特殊的符号
  2. Linux网络服务-Web Service之【HTTP协议简介】(一)
  3. JS函数的定义与调用方法
  4. Android中GridView的实现实例
  5. 网络数据包收发流程(三):e1000网卡和DMA
  6. 教你些技巧,用 Python 自动化办公做一些有趣的事情!太方便了
  7. 关于DSP开发的步骤
  8. 如何正确在Facebook投放产品广告?
  9. sim卡没坏但苹果手机无服务_iPhone手机无服务那些事儿
  10. java怎么使用floor_Java NavigableSet floor()用法及代码示例
  11. CSS3 详细新增内容
  12. Centos7.2 / Linux的下搭建LAMP环境的搭建和配置虚拟主机
  13. live2d_Live2D 看板娘 (WordPress)
  14. [Android O] [RK3399] -- 调试 Audio 模块(ALC5651)
  15. 四旋翼无人机飞控系统设计(基础知识篇)
  16. 陈表达VBA笔记---VBA一键删除空白行
  17. PoetryGenerator的参数
  18. docker 搭建Jenkins持续集成平台
  19. 你的态度,你的旅途风景
  20. SecureCRT上如何下载文件

热门文章

  1. SpringBoot+MyBatis启动报错java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
  2. 【Linux】CentOS下vim的配置
  3. mysql从只有一个备份文件(多个数据库的备份)中恢复数据到指定数据库
  4. 奇异的Pinvoke调用
  5. 查看SVN当前登录用户
  6. $.ajax与$.post、$.get的区别
  7. Telnet基本概念及C# Telnet 客户端程序
  8. 2039 骑马修栅栏
  9. JavaScript_8_比较,条件语句
  10. Eclipse使用Maven创建web3.0项目