相关博文:C++之new再探究

一.C语言中分配堆上的空间,不会调用构造和析构:


  上例代码编译会报错!
附上例代码:

//小问学编程
#include<stdlib.h>
#include<string.h>class CStudent{public://构造函数CStudent(){printf("CStudent()\r\n");};//析构函数~CStudent(){printf("~CStudent()\r\n");}
private:int m_nStuID;//学号
};int main()
{//栈上的对象//全局对象//堆对象char* pBuf=(char*)malloc(10);CStudent* pStu=(CStudent*)malloc(sizeof(CStudent));free(pStu);return 0;
}

二.C++中


附上例代码:

//小问学编程
#include<iostream>
using namespace std;//运算符:
//1.new 分配空间,调用构造函数
//2.delete 调用析构函数,释放空间
class CStudent{public://构造函数CStudent(){cout<<"CStudent()\r\n";};//析构函数~CStudent(){cout<<"~CStudent()\r\n";}
private:int m_nStuID;//学号
};int main()
{//在堆上创建一个对象CStudent* pStu=new CStudent;if(pStu!=nullptr){//释放对象delete pStu;}return 0;
}

普通的基本数据类型也可以用new和delete,但仅仅是分配内存空间:

附上例代码:

//小问学编程
#include<iostream>
using namespace std;int main()
{int* pN=new int;delete pN;return 0;
}

注意:

  1.当申请一个堆上的对象时,使用new和delete,不能用malloc和free替换。
  2.C语言中在堆上申请数组:

  3.C++中在堆上申请数组:new[ ]分配数组,delete[ ]释放数组空间,一定要配套使用(特别是申请对象数组时)。

例:

  4.vs编译器会在new[ ]申请对象数组时, 在堆开始的前4个字节写入当前数组的长度,用于记录delete[ ]释放时,析构调用的次数。

C++之new和delete探究相关推荐

  1. C++之new再探究

    相关博文:C++之new和delete探究 一.C和C语言申请内存 例1 附例1代码: //小问学编程 #include<iostream> #include<cstdio> ...

  2. C++新特性探究(三):=default、=delete

    一. =default   C++的类有四类特殊成员函数,它们分别是:默认构造函数.析构函数.拷贝构造函数以及拷贝赋值运算符.   这些类的特殊成员函数负责创建.初始化.销毁.或者拷贝类的对象.    ...

  3. Vue源码探究-全局API

    Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...

  4. ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新(转载)

    转自:http://blog.csdn.net/freewaywalker/article/details/23703863 1. 要素的添加 ArcGIS Engine中,主要有两个方法用于要素的添 ...

  5. ARouter源码探究

    ARouter源码探究 1. 疑问 如何做到支持直接解析标准URL进行跳转,并自动注入参数到目标页面中? 如何做到支持Multidex.InstantRun? 如何做到映射关系按组分类.多级管理,按需 ...

  6. mysql global temporary table_【转】MySQL Temporary Table相关问题的探究

    本文转载自:http://itindex.net/detail/10901-mysql-temporary-table 问题的引入 让我们先来观察几条非常简单的MySQL语句: mysql> c ...

  7. 深入探究ASP.NET Core读取Request.Body的正确方式

    前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中.因为笔者日常开发所使用的 ...

  8. mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解

    前言 在了解了MyBatis初始化加载过程后,我们也应该研究看看SQL执行过程是怎样执行?这样我们对于Mybatis的整个执行流程都熟悉了,在开发遇到问题也可以很快定位到问题. 更重要的,在面试中遇到 ...

  9. 【探究】信号槽到底能不能有返回值?

    [探究]信号槽到底能不能有返回值? 前言 Qt信号槽到底可不可以有返回值呢?问了下身边的同事,有的人说可以,有的人说不可以.在实际项目中,确实没看到过有人使用带返回值的信号槽,可以说存在感很低.平时大 ...

最新文章

  1. Science子刊: 长期杀虫剂诱导选择下的宿主基因组与微生物组的共适应
  2. python 日志模块 logging
  3. NYOJ练习题 Splits the string (简单动态规划)
  4. springboot日志的级别
  5. scrt如何切换成英文版_英文版SecureCRT显示乱码解决
  6. 评审专家:基金本子“瘦”点好
  7. 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)
  8. linux 查看登入记录_无时无刻,用 SimplyBook.me 管理者 App 查看客户预约排程!
  9. keepalived和heartbeat区别
  10. 如何从命令行删除MongoDB数据库?
  11. sha1算法源码c版
  12. java键盘代码_java中各种类型的键盘输入代码是什么
  13. 拖放drag、drog
  14. 数据库开发技术的课程记录
  15. Win7系统解决无法打开任务管理器
  16. 经纬度计算两地之间的距离(原理与方法)
  17. 【音频】削波失真(爆音)问题定位与解决
  18. R语言:逆变换法生成随机数
  19. 华为云计算IE面试笔记-eBackup有哪几种备份组网方式,各备份组网方式主要的应用场景及备份流程?
  20. 关于qq邮箱 该文件已达到200次的下载限制,您已不能下载该文件 的问题处理

热门文章

  1. thymeleaf条件表达式
  2. 手机通讯录备份代码实现二
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的小说管理系统
  4. moto txt阅读器java版,moto txt阅读器手机版下载
  5. [BZOJ1877][SDOI2009]SuperGCD
  6. spring AOP 讲解
  7. ex28 布尔表达式练习
  8. JavaScript Array 对象(length)方法 (contact、push,pop,join,map、reverse、slice、sort)
  9. EFI下WIN8.1和Ubuntu的双系统安装
  10. [JS]图片自动切换效果(学习笔记)