Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ C++;boost::shared_ptr处理的初始化数组_C++_Shared Ptr - Fatal编程技术网

C++ C++;boost::shared_ptr处理的初始化数组

C++ C++;boost::shared_ptr处理的初始化数组,c++,shared-ptr,C++,Shared Ptr,在我的类中,我希望有一些动态分配的布尔数组。我使用shared\u ptr来保存它: boost::shared_ptr<bool[]> someBoolArray; boost::shared_ptr someBoolArray; 内存分配发生在类构造函数中: // someValue was read from file someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]); //从文件中

在我的类中,我希望有一些动态分配的布尔数组。我使用
shared\u ptr
来保存它:

boost::shared_ptr<bool[]> someBoolArray;
boost::shared_ptr someBoolArray;
内存分配发生在类构造函数中:

// someValue was read from file
someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]); 
//从文件中读取了someValue
someBoolArray=boost::shared_ptr(新bool[someValue]);
是否可以在共享ptr初始化期间为我的阵列设置初始值?

我希望数组中的所有值默认为false。

如果要保证元素设置为
false
,则需要该类型的表达式

new T[N]();
在这种情况下,

someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]()); 
//                                                           ^^
someBoolArray=boost::shared_ptr(新bool[someValue]());
//                                                           ^^

如果要保证元素设置为
false
,则需要类型为

new T[N]();
在这种情况下,

someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]()); 
//                                                           ^^
someBoolArray=boost::shared_ptr(新bool[someValue]());
//                                                           ^^

在C++11中,可以将初始值设定项传递给数组:

new bool[someValue] {false}

我建议您使用make_shared而不是表单。

在C++11中,您可以将初始值设定项传递给数组:

new bool[someValue] {false}
我建议您使用make_shared而不是表单。

如果您没有C++11,您需要将
bool
数组替换为清除其构造函数中数组的类,因为您只能在分配对象数组时使用默认构造函数。此类应包含一个
bool*
,并具有到
bool*
const bool*
的类型转换运算符以及重载的
运算符[]

或者您可以放弃在构造时清除数组,并在
someBoolArray=…
行之后添加一个
for
循环来执行清除。这两种方法都会产生相同的编译代码

顺便说一句,无法使用默认构造函数以外的构造函数创建对象数组是C++11解决的一个语言缺陷。

如果没有C++11,则需要用清除其构造函数中数组的类替换
bool
数组,因为在分配对象数组时只能使用默认构造函数。此类应包含一个
bool*
,并具有到
bool*
const bool*
的类型转换运算符以及重载的
运算符[]

或者您可以放弃在构造时清除数组,并在
someBoolArray=…
行之后添加一个
for
循环来执行清除。这两种方法都会产生相同的编译代码


顺便说一句,无法使用默认构造函数以外的构造函数创建对象数组是C++11解决的一个语言缺陷。

shared\u ptr不能以这种方式工作,请参见和


在回答您的问题时,默认构造的bool(如您使用
new bool[4711]()
)的值应该已经为false,这样您就可以了。

shared\u ptr不以这种方式工作,请参见和


在回答您的问题时,默认构造的bool(正如您通过
new bool[4711]()
得到的)应该已经具有值false,因此您应该可以。

是零初始化OK,还是必须是特定的,用户定义的值集?我希望数组中的所有值在默认情况下都为false。对此,您应该使用
boost::shared_array
。shared_ptr不以这种方式工作,请参见和。零初始化可以吗,还是必须是特定的,用户定义的值集?我希望数组中的所有值默认为false。对此,您应该使用
boost::shared_array
。shared_ptr不是这样工作的,请参见和。但您至少可以调用
new bool[N]()
,这将所有元素设置为
false
@juanchopanza Yes,这就是我在评论中询问零初始化时的想法。奇怪的是,我无法接受这个。也许我的版本不够最新。但你至少可以调用
new bool[N]()
,它会将所有元素设置为
false
@juanchopanza是的,这是我在评论中询问零初始化时想到的。奇怪的是,我无法接受这个。也许我的版本不够最新。问题是关于
boost::shared\u ptr
,它的行为似乎专门针对数组。另外,
new bool[N]
不会将元素设置为
false
bool
的默认构造函数与其他整数类型类似:它什么也不做。您可能会对函数静态或全局bool数组被初始化为0这一事实感到困惑,但这是最近的事情(我认为它实际上是从C继承过来的),并且不是标准所要求的。问题是关于
boost::shared\u ptr
,它的行为似乎对数组有专门化。另外,
new bool[N]
不会将元素设置为
false
bool
的默认构造函数与其他整数类型类似:它什么也不做。您可能会对函数静态或全局bool数组被初始化为0这一事实感到困惑,但这是最近的事情(我认为它实际上是从C继承过来的),而不是标准所要求的。