C++ 对于(placement_params)新运算符后面和键入c+之前的括号,它意味着什么+;?

C++ 对于(placement_params)新运算符后面和键入c+之前的括号,它意味着什么+;?,c++,new-operator,allocation,C++,New Operator,Allocation,第一个括号做什么 // TArray<struct FBatchedLine> BatchedLines; // declared in LineBatchComponent.h new(BatchedLines) FBatchedLine(Start, End, Color, LifeTime, Thickness, DepthPriority); //TArray BatchedLines;//在LineBatchComponent.h中声明 新(批处理线)FBat

第一个括号做什么

// TArray<struct FBatchedLine> BatchedLines;      // declared in LineBatchComponent.h

new(BatchedLines) FBatchedLine(Start, End, Color, LifeTime, Thickness, DepthPriority);
//TArray BatchedLines;//在LineBatchComponent.h中声明
新(批处理线)FBatchedLine(开始、结束、颜色、寿命、厚度、深度优先级);
参考文件说它是一个
位置参数

如果提供了placement_参数,它们将作为附加参数传递给分配函数

我假设它直接在给定数组的末尾创建对象,但我不确定它是如何工作的

placement\u参数
什么时候有用

注意


对于那些有权访问github UnrealEngine repo的用户,是源文件。

这是新语法。它使用构造函数参数
(开始、结束、颜色、寿命、厚度、深度优先级)
BatchedLines
指向的内存中构造类型为
FBatchedLine
的对象。调用后,
BatchedLines
可用于引用构造的对象


非正式地说,您可以想象使用
BatchedLines
调用构造函数是
this

文本:palcement\u params未在中解释。根据英文意思:指针通常放在数组中的一个位置。下面是boost的一个代码示例

T* buffer;
size_t write_index;
new (buffer + write_index) T(t); // copy-construct

本质上,您将一个T类型的新对象放入缓冲区的写入索引位置。

要访问我们的存储库,请在UnrealEngine.com注册一个免费帐户,并使用以下说明注册您的GitHub ID。-是的,你不应该指望每个人都这么做。是的,很抱歉,我没有意识到这一点。新的运营商参考称,这是一个布局参数:“好吧,继续阅读。”。。就在下一行。。。唉,下一段。。。在标准分配函数
void*操作符new(std::size\t,void*)
之后,这种分配函数称为“placement new”,它只返回其第二个参数不变。这用于在分配的存储中构造对象:@arthur.sw Placement
new
明确避免内存分配,而内存分配(堆或堆栈)比潜在的分配和复制更快。如果对象拥有间接内存(例如,
std::string
),则移动通常比复制更有效。更清楚的是,对象是在批处理行中创建的,而不是在“之后”。