社区
C++ 语言
帖子详情
开辟与释放内存
liushui9
2012-06-23 11:36:10
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
...全文
177
13
打赏
收藏
开辟与释放内存
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paschen
版主
2012-06-25
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]
++
C语言是面向过程,而不是面向对角的编程,完全没有构造函数的概念。
而new则会。
sl51314240
2012-06-25
打赏
举报
回复
malloc只分配内存,不调用构造函数
placement new只调用构造函数,不分配内存
new 分配内存,同时调用构造函数
fzamygsd
2012-06-23
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]
freeicy2007
2012-06-23
打赏
举报
回复
什么情况!
qq120848369
2012-06-23
打赏
举报
回复
汗.!
freeicy2007
2012-06-23
打赏
举报
回复
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
kevinyank
2012-06-23
打赏
举报
回复
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete
kevinyank
2012-06-23
打赏
举报
回复
不对。。。。malloc不会执行构造函数。。。可以看下这篇文章。。我转载的http://www.cnblogs.com/wonderKK/archive/2012/03/18/2405196.html
pathuang68
2012-06-23
打赏
举报
回复
[Quote=引用楼主 的回复:]
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
[/Quote]
不对。
new的时候回自动调用构造函数,malloc则不会。
大愚若智_
2012-06-23
打赏
举报
回复
malloc出生的时候 析构函数还在娘胎里呢,,调用不到的
支持楼上的说话
标哥-iOS攻城狮
2012-06-23
打赏
举报
回复
malloc是兼容C语言而保留下来的,C语言中没有构造函数这个概念,所以这道题不对。
int *p = new int();
如果在类型后面加个圆括号,就会调用相应的构造函数来初始化,初始化为0.
string *p = new string;
这是类类型,不用圆括号也会自动调用构造函数来初始化,初始化为空串。
对也内置类型,需要加圆括号,对于类类型,如果有构造函数,就会调用构造函数。
以上仅是我的理解
~~
wshn13
2012-06-23
打赏
举报
回复
显然不对啊
laizhiping_rj
2012-06-23
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]
+1
C语言—动态
内存
开辟
与
释放
空间
一、动态
内存
开辟
的引入 在栈上
开辟
固定的
内存
空间。 int main() { int i = 0;//在栈空间
开辟
四个字节 char arr[10] = { 0 };//在栈空间上
开辟
10个连续空间 return 0; } 特点:1. 空间
开辟
大小是固定的。 2. 数组在申明的时候,必须指定数组的长度,它所需要的
内存
在编译时分配。 3. 但对于有些问题,有时候我们需要的空间大小在程序运行的...
动态
内存
管理(
开辟
以及
释放
动态
内存
空间)
calloc函数的功能也是
开辟
指定大小的
内存
空间,如果
开辟
成功就返回该空间的起始地址,如果
开辟
失败就返回空指针(NULL),但calloc函数传参需要两个参数(
开辟
的
内存
用于存放的元素的个数和每个元素的大小)。malloc函数的功能是
开辟
指定大小的
内存
空间,如果
开辟
成功就返回该空间的起始地址,如果
开辟
失败就返回空指针(NULL),传参时只需要传入需要
开辟
的字节个数。free函数只能从
开辟
好的动态
内存
空间的起始位置开始
释放
,所以使用free函数
释放
动态
内存
空间时,传入的指针必须是当时
开辟
内存
时返回的指针。
C++二维指针
内存
开辟
和
释放
原文链接:C++二维指针
内存
开辟
和
释放
学习C++新手通常会对指针的使用比较头疼,其实指针的概念很简单,只要能悟清楚这样一个简单的道理就能对指针有一定的认识了: 例如 int *a = new int[10]; 一维指针其实就相当于一维数组,不用去看书上所说的数组在
内存
中的首地址这些晦涩的话,以此类推 二维指针就相当于二维数组,新手对一维数组的
开辟
与
释放
比较容易熟悉,例如上面的a
释放
就是 delet
【c++】——
内存
的
开辟
和
释放
1、malloc的用法 2、c++和c中动态
开辟
和
释放
的对比使用 3、new
开辟
内存
的种类 4、new和malloc的区别
C++动态
内存
开辟
与
释放
new和delete
C++动态
内存
开辟
与
释放
new和delete
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章