Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::使_共享吗<;T[]>;值初始化还是默认初始化数组?_C++_Boost_Smart Pointers - Fatal编程技术网

C++ boost::使_共享吗<;T[]>;值初始化还是默认初始化数组?

C++ boost::使_共享吗<;T[]>;值初始化还是默认初始化数组?,c++,boost,smart-pointers,C++,Boost,Smart Pointers,我需要不断地分配一个共享数组unsigned char,作为原始缓冲区来保存来自TCP流的数据,然后将其传递给其他几个线程进行处理。我的问题是,boost::make_shared(std::size_t)值初始化还是默认初始化底层数组?前者由于频率高(大约每秒十次),所以开销太大。我试图查看源代码,但是有太多的帮助程序类,无法清楚地了解它在引擎盖下的功能。来自: 效果:分配适合T类型和大小的数组的内存,并通过placement new expressionnew(pointer)T()或new

我需要不断地分配一个共享数组
unsigned char
,作为原始缓冲区来保存来自TCP流的数据,然后将其传递给其他几个线程进行处理。我的问题是,
boost::make_shared(std::size_t)
值初始化还是默认初始化底层数组?前者由于频率高(大约每秒十次),所以开销太大。我试图查看源代码,但是有太多的帮助程序类,无法清楚地了解它在引擎盖下的功能。

来自:

效果:分配适合T类型和大小的数组的内存,并通过placement new expression
new(pointer)T()
new(pointer)T(args…
在其中构建对象数组。allocate\u shared使用分配器的副本分配内存。如果抛出异常,则无效

这是执行数组的值初始化,因为它的值一次初始化一个元素

Boost还为数组提供了一个
make_shared\u noinit
版本的
make_shared
函数,该函数不执行数组的初始化。这可能更适合您的需要。

来自:

template//U=T[]
共享\u ptr使\u共享\u noinit(大小\u t大小);
模板//U=T[]
共享\u ptr分配\u共享\u noinit(常量A和分配器,大小\u t大小);
描述:这些重载不执行元素的任何值初始化

template<typename U> // U = T[N]
shared_ptr<U> make_shared_noinit();

template<typename U, typename A> // U = T[N]
shared_ptr<U> allocate_shared_noinit(const A& allocator);
template//U=T[N]
共享\u ptr使\u共享\u noinit();
模板//U=T[N]
共享\u ptr分配\u共享\u noinit(常量A和分配器);
描述:上述实用程序的这些重载适用于固定大小的数组

template<typename U> // U = T[N]
shared_ptr<U> make_shared_noinit();

template<typename U, typename A> // U = T[N]
shared_ptr<U> allocate_shared_noinit(const A& allocator);