例如找出令人信服的权威C++中间malloc与new
例如找出令人信服的权威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的更多相关文章
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- 使用T-SQL找出执行时间过长的作业
有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下: SELECT sj.name , ...
- [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 ...
- [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 ...
- [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 ...
- 如何找出标有"App Store 精华","Essentials"的所有软件?
如何找出标有"App Store 精华","Essentials"的所有软件? 中国区: +"App Store 精华" site:http ...
- 在一个SQL Server表中的多个列找出最大值
在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...
- 在数组中找出x+y+z=0的组合
就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...
- 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...
随机推荐
- iOS_8_键盘操作简单
最后效果图: BeyondViewController.h // // BeyondViewController.h // 9_键盘的简单处理 // // Created by beyond on 1 ...
- ftp桥接到http服务
先说一下我的需求:我的linodeserver近期ftp和sftp连不上了,port被封了.仅仅有http能够訪问,我没有办法上传文件了.由于我寻常都用beyond compare上传文件,非常方便. ...
- Mybatis数据操作
Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) M ...
- div 浮动框
- [Python网络编程]gevent httpclient以及网页编码
之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,因为响应使用了C的解析,所以我一直想把这玩意用到项 ...
- APUE学习总结
简介 本文总结了个人,一个数字,对应称号<APUE>第一版的每一章,但是,独立的二级标题和书,人需求进行编写. 3.文件I/O 本章所说明的函数常常被称之为不带缓存的I/O(与第5章中说明 ...
- 【POJ1741】Tree 树分而治之 模板略?
做广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog. ...
- PHP读取Excel里的文件
下载phpExcelReader http://sourceforge.net/projects/phpexcelreader 解压后得到以下这些文件 jxlrwtest.xls这个excel文件有 ...
- cer, pfx 创建,而且读取公钥/密钥,加解密 (C#程序实现)
PKI技术(public key infrastructure)里面,cer文件和pfx文件是非经常见的.通常cer文件中面保存着公钥以及用户的一些信息,pfx里面则含有私钥和公钥. 用makecer ...
- 局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍
局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍 本文主要介绍一种用于海量高维数据的近似近期邻高速查找技术--局部敏感哈希(Locality-Sensitive ...