Ann*_*inn 2 c++ memory malloc new-operator
在C++中,它是标准的始终使用new过malloc().但是,在这个问题中,new在避免平台特定代码的同时使运营商超载的最便携方式是malloc()在其中进行调用以进行实际分配.
当重载时,调用构造函数并保持类型安全性.此外,您还可以监视和控制内存的分配方式.
我的问题是,在这个容量中使用时,malloc()在C++中使用仍然有任何缺点吗?
我能想到的最大缺点是你不能显式调用delete或者delete []在malloc()没有调用未定义行为的情况下使用已分配的指针.如果您打算使用高度不推荐的路径并使用malloc()为C++对象显式分配内存,那么您仍然需要调用placement new以正确调用构造函数来初始化分配的内存位置malloc().如果没有operator new包装器malloc(),您还必须进行测试以确保没有获得NULL返回值,并创建一些代码来处理您没有抛出异常的情况.如果您只是尝试使用C库函数memcpy()来将C++对象复制到分配的堆内存中,那么它也会非常危险,并且会产生许多未定义的行为malloc().
此外,因为您用于placement new对象构造,所以您必须为动态分配的对象显式调用析构函数,然后显式调用free()指针.如果处理不正确,这又会导致各种问题,特别是如果您想使用多态类型和虚拟基类.
如果你想与刚参加工作malloc()和free()拇指的一个很好的规则,以避免不确定的行为缺陷是保持你分配的对象,并取消分配malloc()和free()到POD类型.这意味着非多态结构或类没有用户定义的构造函数,析构函数,复制构造函数,赋值运算符,私有/受保护的非静态数据成员或基类,以及所有非静态数据成员struct/class本身就是POD类型.由于POD类型基本上是C风格的结构(但具有定义非静态方法和this指针的附加功能),您可以安全地使用它们进行C风格的内存管理.
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |