folly::Optional<T> 的复制分配如何工作?
How does copy assignment work in for folly::Optional<T>?
我正在阅读 folly::Optional 中用于 copy assignment 的代码,但我不清楚对 construct()
的调用究竟是如何为可选的赋值的。具体在construct()
这个表达式是如何工作的?
new (const_cast<void*>(ptr)) Value(std::forward<Args>(args)...);
解构你写的那一行:
std::forward<Args>(args)...
正在执行 variadic-template perfect forwarding。本质上,这意味着任何数量的参数都将被转发到 r-value,依此类推。
Value(std::forward<Args>(args)...)
正在根据这些参数调用 Value
的构造函数。
new (const_cast<void*>(ptr))
...正在调用 placement new.
所以这句话的意思是,在这个特定的内存位置创建一个对象,通过转发你得到的所有参数在那里构造对象。
我正在阅读 folly::Optional 中用于 copy assignment 的代码,但我不清楚对 construct()
的调用究竟是如何为可选的赋值的。具体在construct()
这个表达式是如何工作的?
new (const_cast<void*>(ptr)) Value(std::forward<Args>(args)...);
解构你写的那一行:
std::forward<Args>(args)...
正在执行 variadic-template perfect forwarding。本质上,这意味着任何数量的参数都将被转发到 r-value,依此类推。
Value(std::forward<Args>(args)...)
正在根据这些参数调用 Value
的构造函数。
new (const_cast<void*>(ptr))
...正在调用 placement new.
所以这句话的意思是,在这个特定的内存位置创建一个对象,通过转发你得到的所有参数在那里构造对象。