|
|
1
13
它是
placement new
如果您尝试:
|
|
|
2
4
这叫做 placement new . 它允许您在已分配的内存中构造一个对象。 前面的主题讨论 where and how it is useful for . |
|
|
3
3
第二个新的是“新的位置”。它执行初始化(即调用任何必要的构造函数),而不进行任何分配。当需要创建自定义内存分配方案时,它非常有用。 |
|
4
3
这是新位置。
这是最基本的。
别忘了删除原始缓冲区。
其他一些注意事项:
不幸的是,这在技术上是可以的(它可以编译)。但是,由于缓冲区的内存可能没有正确对齐以放置T,因此不能保证它能正常工作。因此,必须动态地分配缓冲区(通过使用新的it保证内存与所分配大小的任何对象正确对齐(因此,通过扩展,它也与小于所分配大小的任何大小对齐)。解决这个问题的简单方法是使用std::vector
placement new的另一个用途是重置对象。
记住,如果使用reset方法,必须先销毁旧对象(否则该对象可能无法正常工作)。 |
|
|
5
2
编辑:除了自定义分配,placement new还有助于 重新初始化
如上所述,也可以使用placement new实现对象状态重置。 placement new不分配内存,它在paranthesis中的指定地址构造对象。 |
|
|
tomm · 谷歌表格-将两列相乘,复制第三列 3 年前 |
|
|
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 4 年前 |
|
|
Andrés BolÃvar · AJAX请求未收到我想要的属性 4 年前 |
|
|
clarkk · 当声明向量时,(1)是什么意思? 4 年前 |
|
|
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 4 年前 |
|
|
michael · 错误的脚本和语法问题 4 年前 |