什么时候使用 std::make_shared_for_overwrite?

When to use std::make_shared_for_overwrite?

C++20 除了 std::make_shared() 之外还引入了新函数 std::make_shared_for_overwrite()https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared

为什么旧的make_shared不够用,什么情况下需要使用新的功能?

std::make_shared() value 初始化它创建的对象,如果您打算稍后为其赋值,这可能是一个不必要的步骤。

std::make_shared_for_overwrite() 默认初始化它创建的对象。

差异只对基本类型的(子)对象有影响,那里没有初始化器。

std::make_shared<int[1000][1000]>() 将分配并清零一百万 ints std::make_shared_for_overwrite<int[1000][1000]>()将分配一百万ints