如何使用 make_unique 构造数组
How to construct an array using make_unique
如何使用std::make_unique
构建std::array
?
在以下代码中 uptr2
的声明无法编译:
#include <iostream>
#include <array>
#include <memory>
int main( )
{
// compiles
const std::unique_ptr< std::array<int, 1'000'000> > uptr1( new std::array<int, 1'000'000> );
// does not compile
const std::unique_ptr< std::array<int, 1'000'000> > uptr2 { std::make_unique< std::array<int, 1'000'000> >( { } ) };
for ( const auto elem : *uptr1 )
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
std::make_unique< std::array<int, 1'000'000> >( { } )
无法编译,因为 std::make_unique
函数模板通过转发引用采用任意数量的参数,并且您不能将 {}
传递给转发引用,因为它具有没有类型。
但是,std::make_unique< std::array<int, 1'000'000> >()
工作正常。它以与声明 auto a = std::array<int, 1'000'000>();
相同的方式初始化 std::array
对象:即值初始化。就像 {}
的聚合初始化一样,在这种特定类型的情况下,值初始化会将其初始化为全零。
如何使用std::make_unique
构建std::array
?
在以下代码中 uptr2
的声明无法编译:
#include <iostream>
#include <array>
#include <memory>
int main( )
{
// compiles
const std::unique_ptr< std::array<int, 1'000'000> > uptr1( new std::array<int, 1'000'000> );
// does not compile
const std::unique_ptr< std::array<int, 1'000'000> > uptr2 { std::make_unique< std::array<int, 1'000'000> >( { } ) };
for ( const auto elem : *uptr1 )
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
std::make_unique< std::array<int, 1'000'000> >( { } )
无法编译,因为 std::make_unique
函数模板通过转发引用采用任意数量的参数,并且您不能将 {}
传递给转发引用,因为它具有没有类型。
但是,std::make_unique< std::array<int, 1'000'000> >()
工作正常。它以与声明 auto a = std::array<int, 1'000'000>();
相同的方式初始化 std::array
对象:即值初始化。就像 {}
的聚合初始化一样,在这种特定类型的情况下,值初始化会将其初始化为全零。