问题描述
我在读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。
所以,这句话就是在这个特定的内存位置创建一个对象,然后通过转发所有得到的参数在那构造对象。