复制分配如何在Folly :: Optional <T>中起作用?

问题描述

我在读copy assignment的folly :: Optional代码时,还不清楚对construct()调用如何为该可选值赋值。具体在construct()中,此表达式如何工作?

new (const_cast<void*>(ptr)) Value(std::forward<Args>(args)...);

解决方法

要解构您编写的行:

std::forward<Args>(args)...正在执行variadic-template perfect forwarding。从本质上讲,这意味着无论r值是多少,都将转发给任何数量的参数,依此类推。

Value(std::forward<Args>(args)...)正在这些参数上调用Value的构造函数。

new (const_cast<void*>(ptr)) ...正在呼叫placement new

所以,这句话就是在这个特定的内存位置创建一个对象,然后通过转发所有得到的参数在那构造对象。