0

在我的课堂上,我想要一些动态分配的布尔数组。我shared_ptr用来握住它:

boost::shared_ptr<bool[]> someBoolArray;

内存分配发生在类构造函数中:

// someValue was read from file
someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]); 

是否可以在 shared_ptr 初始化期间为我的数组设置初始值?
我希望数组中的所有值默认为 false。

4

4 回答 4

4

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

new T[N]();

在这种情况下,

someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]()); 
//                                                           ^^
于 2013-06-30T11:58:30.390 回答
1

在 C++11 中,您可以将初始化程序传递给数组:

new bool[someValue] {false}

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

于 2013-06-30T12:01:42.613 回答
1

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

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

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

于 2013-06-30T12:10:25.790 回答
0

shared_ptr 不能那样工作,例如,shared_ptr 到一个数组:应该使用它吗?并且C++11 是否具有动态分配数组的包装器,如 Boost 的 scoped_array?.

在回答您的问题时,默认构造的 bool (如您所获得的new bool[4711]())应该已经具有值 false ,所以您应该没问题。

于 2013-06-30T12:14:17.603 回答