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. arale-cookie 使用

    https://www.npmjs.com/package/arale-cookie  arale-cookie 使用 define(function() { var Cookie = require ...

  2. maven打包额外的资源文件

    在用Maven打包的时候发现,有一些资源文件打包不到jar包中,于是了解了一下Maven的打包配置,最后得到了解决问题的办法. Maven资源文件的默认约定 构建Maven项目的时候,如果没有进行特殊 ...

  3. 迁移git

    转自:https://www.darrenfang.com/2016/03/transferring-a-repository/ 因为更换服务器,需要将原来的 git 项目迁移到新的服务器上,需要保留 ...

  4. VBS 备份文件

    http://www.cnblogs.com/top5/archive/2009/11/17/1604767.html 参考上面的博客 ' =============== 局域网文件自动备份 VBS ...

  5. ADT打开layout目录的xml报错java.lang.NullPointerException

    原因为使用了Android Studio的绿色JRE,必须要安装安装版JDK或者JRE,绿色版JRE放在ADT目录虽然能启动ADT但是不能启动layout目录的xml

  6. Scrapy 框架简介

    Scrapy 框架 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的 ...

  7. Keras 获取中间某一层输出

    1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. #coding=utf-8 import seaborn as ...

  8. 我的小OJ

    NCOJ 欢迎大家来瓷瓷.出题哦QwQ 嗯,没了.

  9. Java第二次实训

    package fsafsa; import java.util.Scanner; public class fafas { public static void main(String[] args ...

  10. go语言圣经练习

    练习 3.10: 编写一个非递归版本的comma函数,使用bytes.Buffer代替字符串链接操作. package main import ( "fmt" "os&q ...