有了malloc/free为什么还要new/delete?
分类:C++面试题 热度:



malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。


 

上一篇:sizeof的用法 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 有了malloc/free为什么还要new/delete?
    有了malloc/free为什么还要new/delete?
    malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满
  • sizeof的用法
    sizeof的用法
    1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量 sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名
  • C和C++有什么不同?
    C和C++有什么不同?
    从机制上:c是面向过程的(但c也能够编写面向对象的程序);c++是面向对象的,提供了类。可是, c++编写面向对象的程序比ceasy 从适用的方向:c适合要求
  • 输入一个字符串,将其逆序后输出。(使用C++,
    输入一个字符串,将其逆序后输出。(使用C++,
    #include iostream using namespace std; void main() { char a[50];memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,/n); for(i=0,j=strlen(a)-1;istrlen(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t;
  • 是不是一个父类写了一个virtual 函数,假设子类覆
    是不是一个父类写了一个virtual 函数,假设子类覆
    virtual修饰符会被隐形继承的。 private 也被集成,仅仅事派生类没有訪问权限而已 virtual可加可不加 子类的空间里有父类的全部变量(static除外) 同一个函数仅