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

C++ Initialization array handled by boost::shared_ptr

本文关键字:C++ 初始化 处理 数组 ptr boost shared      更新时间:2023-10-16

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

boost::shared_ptr<bool[]> someBoolArray;

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

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

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

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

new T[N]();

在这种情况下,

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

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

new bool[someValue] {false}

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

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

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

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

shared_ptr不能以这种方式工作,请参阅例如,shared_ptr-到数组:应该使用它吗?以及C++11是否具有用于动态分配的数组的包装器,如Boost';s scoped_array?。

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