C++类对象的创建与释放过程

  • 类的定义与实例化
    • 类对象的创建方法
    • 类对象的创建过程
  • 类对象的释放过程
    • 析构函数
    • 缺省析构函数

类的定义与实例化

类对象的创建方法

1、在栈上创建

类名 对象;   // 无参创建方法
类名 对象(实参);  // 有参创建方法

2、在堆上创建

类名* 对象指针 = new 类名;
类名* 对象指针 = new 类名();

3、创建多个对象

类名 对象 = {(实参),(实参),(实参)};
类名* 对象指针 = new 类名(n){类名(实参),类名(实参),类名(实参)};
注意:1、通过malloc创建的类对象不能调用构造函数。2、通过new[]创建的对象,一定要通过delete[]释放。

类对象的创建过程

1、分配类所需要的空间,无论是栈还是堆。
2、传递实参调用构造函数,完成如下任务:

1、根据继承表依次调用父类的构造函数。
2、根据成员变量的顺序依次调用成员变量的构造函数。
3、执行构造函数体中的代码。
注意:执行构造函数的代码是整个构造函数的最后一步,要保证构造函数代码所需要的一切资源和先决条件在该代码执行前已经准备充分,并得到正确的初始化。
#include <iostream>using namespace std;
class A
{public:A(void){cout << "我是A的构造函数" << endl;}
};class B
{public:B(void){cout << "我是B的构造函数" << endl;}
};class C : public A
{public:B b;C(void){cout << "我是C的构造函数" << endl;}
};int main()
{C c;
}

类对象的释放过程

析构函数

析构函数负责释放在构造函数期间获取的所有资源,它的执行过程:

1、先执行析构函数本身代码
2、调用成员类的析构函数
3、调用父类的析构函数

缺省析构函数

  • 如果一个类没实现析构函数,编译器会自动生成一个具有析构功能的二进制指令,它负责释放编译器能够看得到的资源(成员变量、类成员、父类成员),这就是缺省析构。
  • 如果类中没有动态资源,也不需要做善后工作,缺省析构就完全够用了,不需要再定义新析构函数。
    注意:缺省析构无法释放动态资源(堆内存)。
#include <iostream>
#include <string.h>
#include <stdlib.h>using namespace std;class A
{
public:A(void){cout << "我是类A的构造函数" << endl;}~A(void){cout << "我是类A的析构函数" << endl;}
};class B
{
public:B(void){cout << "我是类B的构造函数" << endl;}~B(void){cout << "我是类B的析构函数" << endl;}
};class User : public A
{char* name;char* pass;B b;
public:User(const char* name,const char* pass){this->name = new char[strlen(name)+1];strcpy(this->name,name);this->pass = new char[strlen(pass)+1];strcpy(this->pass,pass);cout << "构造函数" << endl;}~User(void){delete name;delete pass;cout << "析构函数" << endl;}
};int main()
{User* user = new User("zhizhen","zzxx");cout << "----------" << endl;delete user;
}

C++类对象的创建与释放过程相关推荐

  1. c++类对象的创建方式

    对象创建限制在堆或栈 c++类对象的创建方式 对象创建限制在堆或栈 C++ 中的类的对象的建立模式 如何将类限制在堆上呢? C++ 中的类的对象的建立模式 C++ 中的类的对象的建立模式分为两张:静态 ...

  2. python类的定义和创建_Python类对象的创建和使用

    通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...

  3. 爬虫-请求类对象的创建-Request类

    Request类 >功能 构建一个请求对象 请求对象可以像url一样被请求 >笔记 例子-构建请求对象 >基本请求信息 >实例化为请求对象 请求类的使用方式 >先看源码 ...

  4. Java:对象创建和初始化过程

    1.Java中的数据类型     Java中有3个数据类型:基本数据类型(在Java中,boolean.byte.short.int.long.char.float.double这八种是基本数据类型) ...

  5. C++ 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题.当然这都是跟new的用法有关的.ne ...

  6. C++用new和不用new创建类对象区别

    来自博文: 1. https://www.cnblogs.com/kissfu/p/3301436.html 2. https://blog.csdn.net/chen_jint/article/de ...

  7. python 元类 type_Python 使用元类type创建类对象常见应用详解

    本文实例讲述了Python 使用元类type创建类对象.分享给大家供大家参考,具体如下: type("123") 可以查看变量的类型;同时 type("类名", ...

  8. 浅析Java中对象的创建与对象的数据类型转换

    这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型     Java中有3个数据 ...

  9. 类对象作为函数参数进行值传递

    这个是今天踩到的坑,记录一下. 首先先给出几个概念: 1)类对象在创建时会调用构造函数,在释放是会调用析构函数: 2)函数中的局部变量在函数返回后,会由于弹栈从而内存被释放: 3)如果函数参数是采用值 ...

最新文章

  1. 014、Linux下vim搜索与替换
  2. OpenUPF 是释放 5G 潜力的金钥匙
  3. cuda测试caffe编译安装
  4. DSDT亮度修复失败
  5. LA3415保守的老师
  6. SQLServer Always On FCI 脑裂及可疑状态修复
  7. 安装mysql时安装不了starting the server_archlinux/manjaro 上安装percona-server
  8. when to book didi?
  9. 基于MATLAB的信号与系统实验指导,《信号与系统及MATLAB实现》实验指导书
  10. LeetCode中二叉树相关题
  11. java 传入多个参数时报Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1,... 解决方案...
  12. SAP License:SAP-Coding Block
  13. 使用Git将本地项目上传到Github操作详解
  14. MP(Multi-Link PPP)原理和实验
  15. 验证码原理详解与案例
  16. LocalSolver快速入门指南(连载四十一) -车辆路径调度问题建模指导
  17. 两种特殊卷积:转置卷积和空洞卷积
  18. 数据库缓存服务——NoSQL之Redis配置与优化
  19. win10系统1903版本设置默认英文输入法
  20. 基于Conv3D实现三维立体MNIST数据集分类

热门文章

  1. 为什么企业直播能够异军突起?
  2. 中国线缆产业电商的拓荒者 专访缆360 CEO胡德良
  3. 人民币贬值如何影响你的生活
  4. 三种方法获取列表长度
  5. 市场调研-全球与中国沉鱼饲料市场现状及未来发展趋势
  6. 社保只交15年就行?国家白给的羊毛怎么能不薅?
  7. python中iadd与add_如何为Python属性实现-uyu iadd_uu
  8. Allein rennen spielen singen beißen.Espoir parfaitement arbre.
  9. Unity 打包发布UWP 超详细
  10. Android 获取手机内存大小