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继承过来的),而不是标准所要求的。