none
new和malloc有什么不一样? RRS feed

  • 问题

  • char* ffile=NULL;

    ffile=(char*)malloc(filesize+1);

    和下面的有什么不一样啊

    char* ffile=NULL;

    ffile = new char[filesize+1];

    2012年4月5日 5:09

答案

  • malloc创建在自由存储区,new创建在堆上。位置不一样。

    对于简单数据类型以外的对象,使用new会调用构造函数。malloc只会分配内存。


    麻烦把正确答案设为解答。

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 10:58
    版主
  • new是C++操作符,编译器对new的实现可以调用malloc也可以不调用。operator new可能被重载,例如MFC重载了operator new用来检测内存泄漏。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 13:52
    版主
  • 在内存分配上是一样的,都是在堆上分配

    但是new会调用类的构造函数而malloc只分配内存

    可以看作new = malloc + 调用类构造函数



    0xBAADF00D

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 14:14
    版主

全部回复

  • 使用new每个char会初始化成0
    2012年4月5日 5:56
  • char* ffile=NULL;

    ffile=(char*)malloc(filesize+1);

    memset(ffile,NULL,filesize);

    和下面是不是等价?

    char* ffile=NULL;

    ffile = new char[filesize+1];

    2012年4月5日 8:54
  • malloc创建在自由存储区,new创建在堆上。位置不一样。

    对于简单数据类型以外的对象,使用new会调用构造函数。malloc只会分配内存。


    麻烦把正确答案设为解答。

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 10:58
    版主
  • new是C++操作符,编译器对new的实现可以调用malloc也可以不调用。operator new可能被重载,例如MFC重载了operator new用来检测内存泄漏。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 13:52
    版主
  • 在内存分配上是一样的,都是在堆上分配

    但是new会调用类的构造函数而malloc只分配内存

    可以看作new = malloc + 调用类构造函数



    0xBAADF00D

    • 已标记为答案 Honny_yeyh 2012年4月6日 6:43
    2012年4月5日 14:14
    版主