c ++在folly queue的write()函数中使用new关键字

时间:2017-07-13 06:07:21

标签: c++ queue folly

我正在审查Facebook愚蠢的无锁队列,并且对于他们正在使用的方法不熟悉。

在write()函数中,它们使用语法

new (&records_[currentWrite]) T(std::forward<Args>(recordArgs)...);

我本来期待的更多内容

records_[currentWrite] = ....

我知道我遗漏了一些东西,但如果有人可以在这里解释new的使用,因为我认为创建堆变量会产生开销后果。

if (nextRecord != readIndex_.load(std::memory_order_acquire)) {
    new (&records_[currentWrite]) T(std::forward<Args>(recordArgs)...);
    writeIndex_.store(nextRecord, std::memory_order_release);
    return true;
}

https://github.com/facebook/folly/blob/master/folly/ProducerConsumerQueue.h

谢谢!

0 个答案:

没有答案