例如找出令人信服的权威C++中间malloc与new

问题:

非常多人都知道malloc与new都是用来申请空间用的,开辟空间来源于堆中。

可是在C++中却非常少用malloc去申请空间,为什么?

以下小编会以一个非常有说服力的样例来说明。相信大家一看就能明确。

C++程序的格局可分为4个区,注意是“格局”,

1、全局数据区     //当中全局变量,静态变量是属于全局数据区

2、代码区     //全部的类和非成员函数的代码都存放在代码区

3、栈区    //为成员函数执行而分配的局部变量的空间都在栈区

4、堆区 //剩下的那些空间都属于堆区

当中全局变量,静态变量是属于全局数据区。全部的类和非成员函数的代码都存放在代码区。为成员函数执行而分配的局部变量的空间都在栈区。剩下的那些空间都属于堆区。

以下来写个简单的样例:malloc.cpp

#include <iostream>
using namespace std;
#include <stdlib.h> class Test{
public:
Test(){
cout<<"The Class have Constructed"<<endl;
}
~Test(){
cout<<"The Class have DisConstructed"<<endl;
}
}; int main(){
Test *p = (Test*)malloc(sizeof(Test));
free(p);
//delete p;
return 0;
}

编译执行:The Class have DisConstructed

结果是没有调用构造函数。从这个样例能够看出,调用malloc后,malloc仅仅负责给对象指针分配空间。而不去调用构造函数对其初始化。而C++中一个类的对象构造,须要是分配空间。调用构造函数。成员的初始化,或者说对象的一个初始化过程。通过上述样例希望大家在使用C++中尽量不要去使用malloc。而去使用new。

<span style="font-size:14px;">#include <iostream>
using namespace std;
#include <stdlib.h> class Test{
public:
Test(){
cout<<"The Class have Constructed"<<endl;
}
~Test(){
cout<<"The Class have DisConstructed"<<endl;
}
}; int main(){
//Test *p = (Test*)malloc(sizeof(Test));
Test *p = new Test;
cout<<"test"<<endl; //free(p);
delete p; return 0;
}</span>

执行结果例如以下:

The Class have Constructed

The Class have DisConstructed

假设想更加系统了解C++ new/delete,malloc/free的异同点,能够參看“深入C++
new/delete,malloc/free解析
”了解详情。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

例如找出令人信服的权威C++中间malloc与new的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化

    9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...

  2. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  3. [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  4. [LeetCode] Find All Duplicates in an Array 找出数组中所有重复项

    Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...

  5. [LeetCode] Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  6. 如何找出标有"App Store 精华","Essentials"的所有软件?

    如何找出标有"App Store 精华","Essentials"的所有软件? 中国区: +"App Store 精华" site:http ...

  7. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  8. 在数组中找出x+y+z=0的组合

    就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...

  9. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

随机推荐

  1. Android PackageInstaller 安装和卸载

    应用的安装方式:adb install或者下载安装 过程分析请參考老罗的blog,这里记录一下第三方应用程序安装apk的过程. 安装的过程主要是调用PackageInstaller这个App,源码的位 ...

  2. 经常使用的js小方法

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% Strin ...

  3. Mono+CentOS+Jexus

    在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). ...

  4. yum 简介及使用 安装、删除

    使用yum装软件很方便,这里简单介绍一下. Yum简介 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE.CentOS中的She ...

  5. 在JAVA中使用LUA脚本记,javaj调用lua脚本的函数(转)

    最近在做一些奇怪的东西,需要Java应用能够接受用户提交的脚本并执行,网络部分我选择了NanoHTTPD提供基本的HTTP服务器支持,并在Java能承载的许多脚本语言中选择了很久,比如Rhino,Jy ...

  6. 基数排序---Java实现+C++实现

    基数排序是基于桶排序实现的,总之基本思想是:先基于个位进行桶排序,更新原序列:再基于十位进行桶排序,更新原序列-- code1:java import java.util.*; public clas ...

  7. LoadRunner获取一个独特的价值在执行的场景

    /* * * 笔者:古柏涛 * 迄今:2015-2-26 * E-mail:gubotao@foxmail.com * * 内容概要: * 本代码产生一个从1970年1月1日0时開始累计以毫秒为单位的 ...

  8. 【原创】纯OO:从设计到编码写一个FlappyBird (五)

    第四部分请点这里 本文将实现DrawBoard. 如前文所述,Obstacle类和Bing类仅仅提供给DrawBoard必要的信息,如何绘制则完全委托给了DrawBoard,也就是说游戏关键类的细节和 ...

  9. Android Bundle类别

    即使在今天发现自己Bundle类不明确,因此,花时间去研究了一下. 依据google官方文件(http://developer.android.com/reference/android/os/Bun ...

  10. Android开发之Handler和Looper的关系

              关于Handler的总结. Message:消息,当中包括了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理. Handler:处 ...