何时使用Malloc而不是New
何时使用Malloc而不是New
重复的问题:在什么情况下我使用 malloc 而不是 new?\n刚刚重新阅读了这个问题:
\n在 C++ 中,\"new\"、\"malloc\" 和 \"calloc\" 有什么区别?\n我查看了答案,但没有人回答这个问题:\n
- \n
- 什么情况下我会使用 malloc 而不是 new?
\n
\n有几个原因(我能想到两个)。
\n让最好的答案浮现到顶部。
在C++中使用malloc的最好理由是与纯C API交互时。我曾经使用过一些C API,它们会接管某些参数的内存。因此,它们负责释放内存,因此内存必须可以通过free来释放。malloc可以满足这个目的,但new则不一定。
Another reason to use malloc instead of new is when dealing with memory that needs to be explicitly deallocated. Malloc allows for manual memory management, whereas new automatically calls the object's destructor when it goes out of scope. If you need fine-grained control over memory deallocation, malloc may be a better choice.
In addition, malloc can be useful when working with legacy code or existing codebases that heavily rely on malloc. Converting all malloc calls to new can be a tedious and time-consuming process, especially if the codebase is large and complex.
However, it is important to note that using malloc instead of new in C++ is generally not recommended. C++ provides the new operator specifically for memory allocation and object construction, which ensures proper initialization and cleanup. The use of new also enables the use of constructors and destructors, which can be crucial for managing resources and ensuring proper object initialization.
If you find yourself in a situation where you need to use malloc instead of new, it is recommended to encapsulate the malloc calls within a custom memory management class or function. This way, you can ensure consistent and safe memory allocation and deallocation throughout your codebase.
In conclusion, while there may be certain scenarios where using malloc instead of new in C++ is necessary or beneficial, it is generally recommended to stick to the new operator for memory allocation and object construction. This ensures proper initialization and cleanup, and leverages the features and benefits provided by C++ for managing resources.
根据Stroustrup FAQ中关于new/malloc
的内容,使用malloc()时必须考虑初始化和将返回指针转换为正确的类型。还必须考虑是否为所需的用途正确地获取了字节数。就性能而言,在考虑了初始化后,malloc()和new之间没有差异。
解决方法是使用new而不是malloc(),因为new在分配内存时会自动进行初始化,并且返回的指针已经是正确的类型。这样可以避免手动处理初始化和类型转换的问题。
下面是根据上述内容整理的文章:
何时使用malloc而不是new
在C++编程中,经常会遇到分配内存的情况。在分配内存时,有两个常用的方法:malloc和new。然而,有些情况下,我们需要考虑是否使用malloc而不是new。
根据Stroustrup FAQ中的解释,使用malloc时需要考虑初始化和将返回指针转换为正确的类型。此外,还必须确保为所需的用途正确地获取了字节数。相比之下,使用new可以避免这些问题。
使用new关键字进行内存分配时,会自动进行初始化,并且返回的指针已经是正确的类型。这样可以省去手动处理初始化和类型转换的步骤。因此,在大多数情况下,使用new更加方便和安全。
需要注意的是,在考虑性能时,malloc和new之间没有差异。无论是使用malloc还是new,初始化都会带来一定的开销。因此,选择使用malloc而不是new并不能提高性能。
总之,当需要分配内存时,我们应该优先考虑使用new而不是malloc。这样可以避免手动处理初始化和类型转换的问题,同时保持代码的简洁和可读性。