C++入门篇九
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++入门篇九的更多相关文章
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- PC游戏编程(入门篇)(前言写的很不错)
PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...
- 前端向后台的华丽转身 — PHP入门篇
三个月就这么悄悄溜走了,本K对于前端虽然有了一定的认识,但对一些方面还是处于一种比较萌币的状态,就在这种萌币状态下,本K又跟着大神浩开始了后台语言-PHP语言的学习.PHP的学习对于学过其他语言的人来 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- VBScript入门篇
VBScript入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义一个过程 定义一个过程:可以将相同的操作的代码提取出来,方便其他人来调用这段代码,可以减少你的代码的重 ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
随机推荐
- ABP实践(1)-通过官方模板创建ASP.NET Core 2.x版本+vue.js单页面模板-启动运行项目
1,打开ABP官网下载模板页面 2,根据下图选择对应的选项及输入项目名 注:上图验证码下方的选择框打钩表示下载最新稳定版,不打钩表示下载最新版本(有可能是预览版) 3,解压下载的压缩包 解压之后是个a ...
- Linux centos ansible
创建m01.backup.nfs.web01.web02 m01(172.16.1.61).backup(172.16.1.41).nfs(172.16.1.31).web01(172.16.1.7) ...
- DAY29、元类
一.eval内置函数eval内置函数的使用场景: 1.执行字符串会得到相应的执行结果 2.一般用于类型转换,得到dict.list.tuple例: dic_str = ''{'a':1,'b':2}' ...
- .Net Core学习地址
官方教程:https://docs.microsoft.com/zh-cn/aspnet/core/ 入门无忧网:http://www.rm5u.com/netcore/netcore-intro.h ...
- [ffmpeg] h264并行解码
ffmpeg中的并行解码分为两种: Frame-level Parallelism Slice-level Parallelism Frame-level Parallelism 帧间依赖 我们之前讨 ...
- ZuulFilter 执行顺序
说明: 创建了两个Filter,分别是 PreFilter public class PreFilter extends ZuulFilter { public PreFilter() { super ...
- python的排序方式
""" 冒泡排序: 冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置 比如有五个数: 12, 35, 99, 18, 76, 从大到小排序, ...
- 【地图功能开发系列:一】根据当前坐标点获取距离不超过N公里的门店
在此处输入标题 声明变量 //假设当前坐标 double lon1 = 113.336028; double lat1 = 23.21745; //距离m double distance = 1000 ...
- php5.4、5.5、5.6高版本中htmlspecialchars兼容性处理
在使用php5.4以上版本以上时会有一个函数可能会报错 如下 Warning: htmlspecialchars(): charset `gbk' not supported, assuming ut ...
- Python与微信——itchat包
目录 itchat itchat 一安装itchat pip install itchat pip install echarts-python 二登陆并向文件传输助手发消息 import itcha ...