`
kmplayer
  • 浏览: 508774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款3:尽量以new和delete取代malloc和free

阅读更多
1,malloc和free带来的问题很简单:
他们对构造函数和析构函数一无所知.

string* p1=static_cast<string*>(malloc(10*sizeof(string)));
注:指向足够放置10个string对象的内存空间,但其中的对象没有被初始化.
free(p1);
注:会释放p1所指向的内存,但不会调用对象的析构函数.

string* p2=new string[10];
delete[p2];

2,企图对new得到的指针free或对malloc得到的指针delete,结果都是未定义.

3,在C++程序中调用malloc和free并没有错,只要你确定new和delete,malloc和free不要混用即可.
分享到:
评论

相关推荐

    11_new&delete与malloc&free 之间的关系与区别1

    "new与delete和malloc与free之间的关系与区别" 在C++编程语言中,new和delete是C++的关键字,是一种操作符,可以被重载,而malloc和free是C语言的库函数,并且不能重载。这两对函数都是用于内存管理的,但是它们...

    Malloc和new区别

    与 Malloc 和 Free 不同,New 和 Delete 是编译器级别的特性,而非库函数。 #### 二、动态内存分配与初始化 对于 C++ 中的数据结构或对象来说,仅使用 Malloc 和 Free 无法完全满足需求。具体原因如下: 1. **...

    Effective.C++.中文第二版.50条款doc文档.chm

    条款3:尽量用new和delete而不用malloc和free 条款4:尽量使用c++风格的注释 第二章 内存管理 条款5:对应的new和delete要采用相同的形式 条款6:析构函数里对指针成员调用delete 条款7:预先准备好内存不够的情况 ...

    C++中new和malloc的区别

    在释放内存时,delete和free分别用来释放new和malloc分配的内存,以防止内存泄漏。 不同点 操作对象不同:malloc和free是C和C++语言的标准库函数,new和delete是C++中的运算符。malloc/free是库函数,new/delete...

    malloc和new的区别

    在实际开发中,malloc/free和new/delete都可以用于动态内存管理,但是它们有着不同的应用场景和用途。malloc/free通常用于C语言和C++语言混合编程环境中,而new/delete则更适合纯C++语言开发环境。同时,new/delete...

    new与malloc 的区别和用法

    3. `new`和`delete`组合使用,`malloc`和`free`配合使用,释放内存时需注意对象析构。 4. `new`更适合C++环境,与C++特性兼容,`malloc`适用于C语言环境或与C库的交互。 了解这些区别后,开发者可以根据具体需求...

    c++结构体string无法用malloc分配内存

    在C++编程中,结构体(struct)是一种用户自定义的数据类型,它可以包含各种基本数据类型、其他结构体或类的...在C++编程中,理解如何正确管理内存以及何时使用`new`与`malloc`至关重要,以避免内存泄漏和运行时错误。

    C语言实现malloc和free

    在C语言中,`malloc`和`free`是两个非常重要的内存管理函数,它们用于动态地分配和释放内存。理解并能自己实现这两个函数对于深入理解C语言内存管理至关重要。`malloc`函数允许程序在运行时请求特定大小的内存块,而...

    malloc 与new的区别

    尽管malloc和free以及new和delete在不当使用下都有可能出现内存泄漏,但使用new和delete时,编译器能够提供更精确的信息,比如在哪个文件的哪一行发生内存泄漏,这使得调试和问题定位更加方便。 总结来说,new和...

    C++中new与delete、malloc与free应用分析

    一般来说,在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了。本文即是对new/delete和malloc/free这两对的使用和区别较为简单的分析...

    深入理解C++中的new/delete和malloc/free动态内存管理及区别介绍

    总结来说,`new`/`delete`与`malloc`/`free`的主要区别在于C++的内存管理更注重对象生命周期的管理,包括构造、析构以及异常处理机制,而`malloc`/`free`则更为原始,只关注内存的分配和释放。因此,在C++编程中,...

    浅谈C中的malloc和free

    ### 浅谈C中的malloc和free 在C语言的学习过程中,`malloc()`和`free()`是两个非常重要的函数,它们负责动态内存分配与释放的工作。虽然很多初学者只知道如何使用`malloc()`分配内存然后用`free()`释放内存,但实际...

    malloc和free的实现

    ### malloc和free的实现 #### 一、概述 在C/C++编程中,动态内存管理是程序员必须掌握的一项技能。`malloc` 和 `free` 函数是用于在运行时分配和释放内存的重要工具。本文将详细介绍如何在Visual C++ 2008环境下...

    C语言也能面向对象(三)——通用的new和delete

    3. **构造和析构**:每个类都需要提供自己的构造和析构函数,以便在`new`和`delete`中调用。 4. **内存布局**:如果类包含成员变量,需要考虑对齐问题,以确保正确分配和访问内存。 通过这种方式,我们可以在C语言...

    C语言的malloc和free函数.pdf

    本文将详细解释malloc和free函数的用法和内存管理的存储机制,以便学习和使用。 首先,malloc函数是在C语言中使用最为广泛的内存分配函数之一。它在运行期间为程序分配所需大小的内存空间。其原型定义在stdlib.h...

    C++面试试题2.docx

    C++中new和malloc的区别 功能: new:分配内存并调用构造函数初始化对象。 malloc:仅分配内存,不调用构造函数。 返回值: new:返回对象的类型指针,分配失败抛出std::bad_alloc异常。 malloc:返回void*,需要...

Global site tag (gtag.js) - Google Analytics