社区
C++ 语言
帖子详情
开辟与释放内存
liushui9
2012-06-23 11:36:10
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
...全文
250
13
打赏
收藏
开辟与释放内存
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
【动态
内存
2】:C++中的
内存
开辟
与
释放
&&底层实现
new与delete是用于
开辟
内存
与
释放
内存
,用于堆
内存
管理的两个关键字(标识符),与C语言中的malloc/free对应,new与delete相较于malloc和free实现机制更为复杂,new申请空间时还会调用构造函数,delete
释放
空间时还会析构函数。 注意:new/delete ;malloc 与free都要成对使用哦!!!以免
内存
泄漏 一、new的用法 new是关键字,返回...
【C语言】动态
内存
开辟
与
释放
函数malloc和free
所以malloc函数并不知道
开辟
空间的类型,具体在使用的时候使用者自己来决定。(要进行强制类型转化)如果
开辟
失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。如果参数ptr指向的空间不是动态
开辟
的,那free函数的行为是未定义的。如果参数size为0,malloc的行为是标准是未定义的,取决于编译器。这个函数向
内存
申请一块连续可用的空间,并返回指向这块空间的指针。如果参数ptr是NULL指针,则函数什么事都不做。如果
开辟
成功,则返回一个指向
开辟
好空间的指针。
C++中的动态
内存
开辟
new与
释放
delete
//本程序的主要功能是体验C++当中的动态
内存
开辟
以及
释放
#include <iostream> int main() { int* p = nullptr; int* q = nullptr; //以上两个语句定义了两个指针变量p和q,都为空指针变量 p = new int(123); q = new int[5]; //以上两个语句动态
开辟
了两个
内存
空间,一个整型变量
内存
空间并被赋值为123,一个含有 //5个整型元素的数组,并且分别.
C++动态
内存
管理:
开辟
与
释放
详解
本文还有配套的精品资源,点击获取 简介:C++中的动态存储管理允许程序在运行时按需分配和
释放
内存
,这对创建复杂数据结构和处理不确定大小的数据集非常重要。本文详细探讨了 new 和 delete 操作符在C++中的应用,包括基本用法和高级特性,旨在帮助开发者避免
内存
泄漏,确保程序高效运行。 1. 动态存储管理定义和重要性 在计算机程...
C语言—动态
内存
开辟
与
释放
空间
一、动态
内存
开辟
的引入 在栈上
开辟
固定的
内存
空间。 int main() { int i = 0;//在栈空间
开辟
四个字节 char arr[10] = { 0 };//在栈空间上
开辟
10个连续空间 return 0; } 特点:1. 空间
开辟
大小是固定的。 2. 数组在申明的时候,必须指定数组的长度,它所需要的
内存
在编译时分配。 3. 但对于有些问题,有时候我们需要的空间大小在程序运行的...
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章