explicit关键字:防止构造函数隐式类型转换

#include  <iostream>
#include "pch.h"
using namespace std; class Person1 {
public:
explicit Person1( int a) {//防止隐式构造函数的使用
num = a;
}
int num;
};
void test01() {
//Person1 p1(10);//隐式类型转换,就是Person p1=Person(10),调用的是有参构造函数,默认是使用隐式构造函数
  //如果使用了explicit的话,那么不能隐式类型转换
  Person1 p1(); }
int main() {
test01();
}

运算符:new(重要):分配内存空间,delete释放内存空间

函数:malloc

new的运算符里,当用new创建对象的时候,它在堆区为对象分配内存并调用构造函数完成初始化,delete释放空间

Person1* person = new  Person1;
相当于
Person1* person = (Person1*)malloc * (sizeof(Person1));//Person1*强转
if (person == Null) {
return ;
}
person->Init();//构造函数
new操作符可以确定在调用构造哈数之前内存分配是成功的,所有不用显式确定调用是否成功

栈区开辟:Person  p1

堆区开辟:Person p2=new  Person;  释放delete  p2;(重要)

#include "pch.h"
#include <iostream>
using namespace std; class Person {
public:
Person() {
cout << "无参构造函数" << endl;
} Person(int a) { }
~Person()
{
cout << "析构函数调用" << endl;
}
}; //第一种
void test01() {
//Person p1;//栈区开辟 Person* p2 = new Person;//堆区开辟
//所有new出来的对象,都会返回该类型的指针,上面的是person,那就返回person类型的指针,运算符号
//malloc会返回void*,还要进行强转
//malloc不会调用构造函数,new会调用函数,malloc是一个函数,new是一个运算符 //释放堆区的空间、
delete p2;//也就是释放析构的过程,逆序,delete也是一个运算符,malloc配合free来使用
} //第二种
void test02() {
//当void*接收new出来的指针,会出现释放的问题
void* p2 = new Person;
delete p2;//使void*不会释放p2(析构函数)
} //第三种
void test03() { //通过new来开辟数组
Person * p3 =new Person[];//当有多个person对象的时候,前面要加*,开辟多个person对象出来
//new开辟数组的话,一定会使用默认构造函数,如果没有默认构造函数的话,就会报错,所以一定要提供默认构造函数 //在栈上面开辟数组的话,可以没有默认构造函数,指定的是有参构造函数
//Person p4[2] = { Person(3),Person(5) };//栈上开辟数组的话,可以不用有默认构造 //释放数组,一定要加上一个[],指针指向的内存空间是否存在一个数组记录大小记录
delete [] p3;//加[]的目的是是记录数组大小记录,告诉他,有多少个对象数据,那么这个delete就知道几个对象数组,并且调用调用几次析构函数
}
int main(
) { //test01();
//test02();
test03();
}
//使用new运算符来堆区开辟的话,一定会使用默认构造函数的,所以一定要提供默认构造函数

没有delete释放之前(new):

释放堆区数组之后,释放数组要加[],这样才知道要释放多少个对象数据,其他情况不用,delete  []   p3;

总结:

new运算符:

Person *p=new Person;会返回一个Person指针
默认调用构造函数,开辟空间,返回的不是void * ,不需要强制转换
delete运算符释放
new对象用void*去接收,释放不了对象
new出来的数组的话,释放的话,delete [] xxx;
new出来的是数组,肯定会调用默认构造

malloc函数:
malloc:返回的是void*,不会调用构造函数

C++入门篇九的更多相关文章

  1. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  2. PC游戏编程(入门篇)(前言写的很不错)

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

  3. 前端向后台的华丽转身 — PHP入门篇

    三个月就这么悄悄溜走了,本K对于前端虽然有了一定的认识,但对一些方面还是处于一种比较萌币的状态,就在这种萌币状态下,本K又跟着大神浩开始了后台语言-PHP语言的学习.PHP的学习对于学过其他语言的人来 ...

  4. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  5. VBScript入门篇

    VBScript入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义一个过程 定义一个过程:可以将相同的操作的代码提取出来,方便其他人来调用这段代码,可以减少你的代码的重 ...

  6. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  7. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  8. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  9. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

随机推荐

  1. Python进阶7--正则表达式

    正则表达式*** 概述 分类 基本语法  元字符 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符. [.. ...

  2. C# 中使用面向切面编程(AOP)中实践代码整洁

    1. 前言 最近在看<架构整洁之道>一书,书中反复提到了面向对象编程的 SOLID 原则(在作者的前一本书<代码整洁之道>也是被大力阐释),而面向切面编程(Aop)作为面向对象 ...

  3. 对称加密之AES加密详解

    最近有人问我AES对称加密是啥,我回答了个大概,发现自己不能清晰的讲出来,特此记录,以供学习 一.对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decrypti ...

  4. Ubuntu18.04关机卡死问题

    直接进入正题!你的电脑卡死说明带有独显!而Ubuntu默认是不给你的显卡装驱动的,那这就导致关机卡死的问题.按住键盘Ctrl+Alt+T打开终端,输入下面的命令 software-properties ...

  5. Linux uniq 命令

    Linux uniq 命令  Linux 命令大全 Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用. uniq 可检查文本文件中重复出现的行列. 语法 ...

  6. 【深度学习】RNN | GRU | LSTM

    目录: 1.RNN 2.GRU 3.LSTM 一.RNN 1.RNN结构图如下所示: 其中: $a^{(t)} = \boldsymbol{W}h^{t-1} + \boldsymbol{W}_{e} ...

  7. TensorFlow windows 安装(base anaconda)

    Python conda安装之后(19年默认是python3.7) 1.降级到python3.6 2.查看python版本 3.安装tensorflow

  8. To making it count.

    - How do you take your caviar, sir? 鱼子酱还要吗,先生? - No caviar for me, thanks.  Never did like it much. ...

  9. 编译VisualVM源码解决乱码问题

    编译VisualVM源码解决乱码问题 起因 今天在使用VisualVM对测试服务器进行JVM监控的时候,发现所有统计图的横纵坐标都是显示乱码(小方块),即使我的Ubuntu系统使用的是英文语言环境.奇 ...

  10. shell 生成文件统计信息

    #!/bin/bash #file name : filestat.sh if [ $# -ne 1 ]; then echo "Usage is $0 basepath"; ex ...