![]() |
1
1
Placement new允许您在已分配的内存中构造对象。当您需要构造一个对象的多个实例时,您可能希望这样做以进行优化,并且每次需要新实例时不重新分配内存会更快。相反,对可以容纳多个对象的内存块执行一次分配可能更有效,即使您不想一次使用所有对象。 DevX给出了一个 good example :
您可能还想确保关键代码的某个部分不会出现分配失败(例如,在起搏器执行的代码中)。在这种情况下,您可能希望更早地分配内存,然后在关键部分中使用placement new。 新安置中的分配您不应该释放正在使用内存缓冲区的每个对象。相反,您应该只删除[]原始缓冲区。然后,您必须手动调用类的析构函数。有关这方面的好建议,请参阅Stroustrup的常见问题解答: Is there a "placement delete" ? |
![]() |
2
0
我们将其与自定义内存池一起使用。只是一个草图:
现在,您可以将对象聚集在一个内存竞技场中,选择一个非常快但不进行释放的分配器,使用内存映射,以及您希望通过选择池并将其作为参数传递给对象的放置新运算符来施加的任何其他语义。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |