首页 > 试题广场 >

下列关于new delete 与malloc free 的联

[不定项选择题]
下列关于new delete 与malloc free 的联系与区别描述正确的有?
  • 都是在栈上进行动态的内存操作
  • 用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数
  • delete 会调用对象的destructor,而free 不会调用对象的destructor
  • 以上说法都不正确
答案:BC
A:都是在堆上取得内存。
BC的详细解释可以参考一下这篇博文,作者写的很详细。http://blog.csdn.net/hazir/article/details/21413833
发表于 2015-07-04 21:22:19 回复(0)

new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

 malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

发表于 2018-07-26 22:19:35 回复(0)
答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.
发表于 2014-10-25 00:26:12 回复(3)
有点好奇  new如果不是用来分配对象而是普通的变量呢????就像C语言里分配一个缓冲区一样,这种情况下哪来的构造函数???????????
发表于 2018-08-14 15:27:06 回复(2)
A:栈是用户站用它来实现函数调用;调用malloc和free这样的标准库函数时进行内存操作使用的是堆。
BC是对的;
发表于 2019-01-28 17:33:10 回复(0)
栈是用户站用它来实现函数调用;调用malloc和free这样的标准库函数进行内存操作用堆
发表于 2022-02-19 10:42:54 回复(0)
堆区:由程序员手动申请与释放的内存区域,从低地址向高地址申请,内存空间大,存储地址不连续,一般为链式,速度较慢。 栈区:由编译器自动分配与释放,主要用于存储函数的参数值、函数内部的变量值、函数调用的空间。从高地址向低地址申请,容量有限,存储地址连续,速度较快
发表于 2023-04-07 14:26:50 回复(0)
我不懂,我只想做C语言的题目,为啥总是给我来点C++的题。。。。我不会C++啊。。。
发表于 2022-11-25 11:06:44 回复(0)
未仔细审题,堆用于动态分配,栈空间只用于局部变量
发表于 2021-08-10 08:44:35 回复(0)
构造函数不是不能被显式调用???
发表于 2018-01-15 10:04:12 回复(1)
当new 的是一个内置类型,不是不进行初始化吗?可不可以理解为不一定调用对象的构造函数?所以B选项?
编辑于 2017-01-02 12:14:01 回复(0)