动态创建的对象数组需要使用非默认构造函数,我遇到的问题是语法。在我看来,我能够做到这一点
int * somePtr = new int[5];
意味着我应该能够做到这一点
IntegerSet* someSet = new IntegerSet(this->getLength())[5];
其中IntegerSet是我制作的代表整数集的类。此代码在IntegerSets成员函数之一内部发生。尝试此操作时,出现语法错误
“无法从IntegerSet转换为IntegerSet *”
我理解这是什么意思,这两种类型不是等效的,但是除了第2部分必须将参数列表作为构造函数传递外,我看不到在第1部分和第2部分中所做的区别。 。所以我怀疑是在那部分代码中语法错误
最佳答案
new
表达式仅允许默认初始化,您不能在单个new
表达式中执行此操作。您可以做的是分配原始内存,并使用new放置一个接一个地构造对象(请参阅this answer中的Object array initialization without default constructor)
甚至更好的是,不要使用C样式的数组。而是使用一些STL容器,例如std::vector
及其构造函数,其中第二个参数是将用于初始化元素的值:
std::vector<IntegerSet> integers(5, IntegerSet(this->getLength()) );